- 浏览: 314205 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (254)
- java (178)
- tomcat (6)
- 邮件 (1)
- smtp (1)
- Linux (2)
- 编码 (2)
- 导入工程 (1)
- Specification Level (1)
- hibernate (10)
- 字段类型 (1)
- 字段类型匹配 (1)
- 数据库 (3)
- sql (9)
- struts2 (8)
- 类型转换 (2)
- java,MyEclipse,SVN (1)
- Myecplise (4)
- 输入校验 (1)
- JFrame (2)
- Oracle (8)
- google (1)
- Swing (3)
- Fusioncharts (1)
- 找工作 (0)
- js (4)
- jsp (11)
- displaytag (1)
- spring (8)
- 工作 (1)
- String (1)
- 算法 (2)
- IO (1)
- xml (3)
- 设计模式 (1)
- UML (1)
- 文档 (1)
- ajax (1)
- 日常 (7)
- sql server (1)
- mysql (3)
- git (1)
- Maven (1)
- mongodb (1)
- postman (1)
最新评论
上面我们已经学习了DOM和SAX两种解析XML的方式,但是总体来说,感觉这两种方式还是不太方便,解析起来非常费劲,非常繁琐,不是特别令人满意。所以现在在开源的世界里面,很多人或是很多社区已经帮助我们实现出来了针对XML解析的这些库,我们可以直接拿来用。经历过上面的DOM和SAX那么繁琐的解析方式之后,下面要讲的这些解析方式使用起来非常简单,非常方便。学习起来比较简单,经历过痛苦之后尝到甜头了。下面讲的这些解析方式在实际开发里面用的非常多,实际开发里面其实很少有人直接用JAXP(DOM或SAX)这种解析方式,但是它是基础,必须会。
下面要讲解的实际开发中常用的使用起来非常简单的解析方式有JDOM和DOM4J两种:
首先讲解JDOM:
JDOM(http://www.jdom.org/)。
附件xml_6.pdf包含JDOM详细笔记,是上课课件。仔细阅读
附件jdom-1.1.1.zip,它里面包含了jdom相关的所有内容,是从官网下载的完整包(里面包含API文档),网盘下载地址:http://pan.baidu.com/s/1b44OH
JDOM将DOM和SAX结合起来了,并且弥补了它们各自的不足之处,并且专门为java服务的,使用起来非常简单,详细笔记查看附件xml_6.pdf。
JDOM的使用是直截了当的,非常爽。
JDOM是由以下几个包组成的:
---org.jdom包含了所有的xml文档要素的java类
---org.jdom.adapters包含了与dom适配的java类
---org.jdom.filter包含了xml文档的过滤器类
---org.jdom.input包含了读取xml文档的类
---org.jdom.output包含了写入xml文档的类
---org.jdom.transform包含了将jdomxml文档接口转换为其他xml文档接口
---org.jdom.xpath包含了对xml文档xpath操作的类。
Org.jdom这个包里的类是你解析xml文件后所要用到的所有数据类型:
---Attribute
---CDATA
---Coment
---DocType
---Document
---Element
---EntityRef
---Namespace
---ProscessingInstruction
---Text
使用jdom需要引入jdom.jar文件,这个文件在附件的jdom-1.1.1.zip包里面。
下面是使用JDOM解析XML的一些示例:
JDomTest1.java:
JDomTest2.java:
附属类:
jdom.xml:
jdom2.xml:
JDOM的输出类(将构建好的XML输出到硬盘或是其它地方):XMLOutputter
JDOM的加载XML类(加载XML文档类):SAXBuilder、DOMBuilser、ResultSetBuilder
===========================上面讲解的是JDOM==========================
===========================下面讲解DOM4J=============================
下面讲解DOM4J:
Dom4J(www.dom4j.org)
这也是java里面用的非常多的另外一个解析XML框架。
DOM4J的来源:最开始是有JDOM,后来JDOM开发人员有一帮人就不在那干了,辞职了,自己搞出来一个DOM4J,既然这些人在JDOM干过,难免会留下JDOM的一些痕迹,因此DOM4J的使用方式以及API与JDOM很相似。
附件dom4j-1.6.1.zip,它里面包含了dom4j相关的所有内容,是从官网下载的完整包,网盘下载地址:http://pan.baidu.com/s/1vNo7O
要想使用dom4j,需要将dom4j-1.6.1.jar加入到classpath下面。
附件dom4j.chm,dom4jAPI文档,网盘下载地址:http://pan.baidu.com/s/1nFJx0
DocumentHelper是使用Dom4J过程中一些辅助方法的集合,用于帮助做一些辅助的事情,相当于util包里面的内容一样。这个类里面的所有方法都是静态方法。
Dom4J里面通过XMLWriter将文档内容写到目的地里面去
下面是利用Dom4J创建、解析XML的一些使用示例:
Dom4JTest1.java:
附属类:student2.xml:
笔记:
1、对于JDOM的Format类的getRawFormat()方法,通常用于XML数据的网络传输,因为这种格式会去掉所有不必要的空白,因此能够减少网络传输的数据量。
下面要讲解的实际开发中常用的使用起来非常简单的解析方式有JDOM和DOM4J两种:
首先讲解JDOM:
JDOM(http://www.jdom.org/)。
附件xml_6.pdf包含JDOM详细笔记,是上课课件。仔细阅读
附件jdom-1.1.1.zip,它里面包含了jdom相关的所有内容,是从官网下载的完整包(里面包含API文档),网盘下载地址:http://pan.baidu.com/s/1b44OH
JDOM将DOM和SAX结合起来了,并且弥补了它们各自的不足之处,并且专门为java服务的,使用起来非常简单,详细笔记查看附件xml_6.pdf。
JDOM的使用是直截了当的,非常爽。
JDOM是由以下几个包组成的:
---org.jdom包含了所有的xml文档要素的java类
---org.jdom.adapters包含了与dom适配的java类
---org.jdom.filter包含了xml文档的过滤器类
---org.jdom.input包含了读取xml文档的类
---org.jdom.output包含了写入xml文档的类
---org.jdom.transform包含了将jdomxml文档接口转换为其他xml文档接口
---org.jdom.xpath包含了对xml文档xpath操作的类。
Org.jdom这个包里的类是你解析xml文件后所要用到的所有数据类型:
---Attribute
---CDATA
---Coment
---DocType
---Document
---Element
---EntityRef
---Namespace
---ProscessingInstruction
---Text
使用jdom需要引入jdom.jar文件,这个文件在附件的jdom-1.1.1.zip包里面。
下面是使用JDOM解析XML的一些示例:
JDomTest1.java:
package com.shengsiyuan.xml.jdom; import java.io.FileOutputStream; import org.jdom.Attribute; import org.jdom.Comment; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; /** * JDOM的第一个使用示例 * 使用JDOM将一个内存里面构造好的XML文件写到硬盘上 * 类: JDomTest1 <br> * 描述: TODO <br> * 作者: * 时间: Dec 10, 2013 4:38:50 PM */ public class JDomTest1 { public static void main(String[] args) throws Exception { // 文档 Document document = new Document(); // 元素 Element root = new Element("root"); // 将元素添加到文档里面 document.addContent(root); // 注释 Comment comment = new Comment("This is my comments"); root.addContent(comment); Element e = new Element("hello"); // 设置属性 e.setAttribute("souhu", "www.souhu.com"); root.addContent(e); Element e2 = new Element("world"); // 属性 Attribute attr = new Attribute("test", "hehe"); e2.setAttribute(attr); e.addContent(e2); // 方法链编程风格 e2.addContent(new Element("aaa").setAttribute("a", "b").setAttribute( "x", "y").setAttribute("gg", "hh").setText("text conent")); // 定义XML的输出格式类,并在下面将此对象传递到XML的输出类XMLOutputter的对象里面去 // getPrettyFormat()是我们常见的比较好看的XML显示格式。 Format format = Format.getPrettyFormat(); // 设置缩进(演示此方法的使用,实际开发中上面的getPrettyFormat()方法获得的输出样式格式就很好看了) format.setIndent(" "); format.setEncoding("UTF-8"); // 实例化XML的输出类 XMLOutputter out = new XMLOutputter(format); out.output(document, new FileOutputStream("jdom.xml")); } }
JDomTest2.java:
package com.shengsiyuan.xml.jdom; import java.io.File; import java.io.FileOutputStream; import java.util.List; import org.jdom.Attribute; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; /** * 将JDomTest1.java创建好的XML文档进行修改,修改之后将内容存放到另一个XML文件jdom2.xml * 类: JDomTest2 <br> * 描述: TODO <br> * 作者: * 时间: Dec 11, 2013 9:52:35 AM */ public class JDomTest2 { public static void main(String[] args) throws Exception { SAXBuilder builder = new SAXBuilder(); // 加载文档到内存里面,并返回文档对象 Document doc = builder.build(new File("jdom.xml")); // 获得文档根元素 Element elemtent = doc.getRootElement(); System.out.println(elemtent.getName()); Element hello = elemtent.getChild("hello"); System.out.println(hello.getText()); // 获得所有属性 List list = hello.getAttributes(); for (int i = 0; i < list.size(); i++) { Attribute attr = (Attribute) list.get(i); String attrName = attr.getName(); String attrValue = attr.getValue(); System.out.println(attrName + "=" + attrValue); } // 删除hello元素里面的world子元素(包括world里面的所有东西也都删除了) hello.removeChild("world"); XMLOutputter out = new XMLOutputter(Format.getPrettyFormat()); // 将修改过的XML文件写到新的文件里面去 out.output(doc, new FileOutputStream("jdom2.xml")); } }
附属类:
jdom.xml:
<?xml version="1.0" encoding="UTF-8"?> <root> <!--This is my comments--> <hello souhu="www.souhu.com"> <world test="hehe"> <aaa a="b" x="y" gg="hh">text conent</aaa> </world> </hello> </root>
jdom2.xml:
<?xml version="1.0" encoding="UTF-8"?> <root> <!--This is my comments--> <hello souhu="www.souhu.com" /> </root>
JDOM的输出类(将构建好的XML输出到硬盘或是其它地方):XMLOutputter
JDOM的加载XML类(加载XML文档类):SAXBuilder、DOMBuilser、ResultSetBuilder
===========================上面讲解的是JDOM==========================
===========================下面讲解DOM4J=============================
下面讲解DOM4J:
Dom4J(www.dom4j.org)
这也是java里面用的非常多的另外一个解析XML框架。
DOM4J的来源:最开始是有JDOM,后来JDOM开发人员有一帮人就不在那干了,辞职了,自己搞出来一个DOM4J,既然这些人在JDOM干过,难免会留下JDOM的一些痕迹,因此DOM4J的使用方式以及API与JDOM很相似。
附件dom4j-1.6.1.zip,它里面包含了dom4j相关的所有内容,是从官网下载的完整包,网盘下载地址:http://pan.baidu.com/s/1vNo7O
要想使用dom4j,需要将dom4j-1.6.1.jar加入到classpath下面。
附件dom4j.chm,dom4jAPI文档,网盘下载地址:http://pan.baidu.com/s/1nFJx0
DocumentHelper是使用Dom4J过程中一些辅助方法的集合,用于帮助做一些辅助的事情,相当于util包里面的内容一样。这个类里面的所有方法都是静态方法。
Dom4J里面通过XMLWriter将文档内容写到目的地里面去
下面是利用Dom4J创建、解析XML的一些使用示例:
Dom4JTest1.java:
package com.shengsiyuan.xml.dom4j; import java.io.FileOutputStream; import java.io.FileWriter; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; /** * 使用Dom4J创建XML文档实例 * 类: Dom4jTest1 <br> * 描述: TODO <br> * 作者: * 时间: Dec 11, 2013 11:03:22 AM */ public class Dom4JTest1 { public static void main(String[] args) throws Exception { // 创建一个文档并设置文档的根元素:第一种方式: // Document document = DocumentHelper.createDocument(); // Element root = DocumentHelper.createElement("student"); // document.setRootElement(root); // 创建一个文档并设置文档的根元素:第二种方式: Element root = DocumentHelper.createElement("student"); Document document = DocumentHelper.createDocument(root); root.addAttribute("name", "zhangsan"); // 在根元素下面添加子元素并且将新添加的元素返回 Element helloElement = root.addElement("hello"); Element worldElement = root.addElement("world"); helloElement.setText("hello"); worldElement.setText("world"); helloElement.addAttribute("age", "20"); // 将构建好的xml文档写到目的地 XMLWriter xmlWriter = new XMLWriter(); // 输出到控制台上 xmlWriter.write(document); // 格式化输入的代码 OutputFormat format = new OutputFormat(" ", true); // 将代码输出到student2.xml里面(输出的第二种使用方式) XMLWriter xmlWriter2 = new XMLWriter(new FileOutputStream( "student2.xml"), format); xmlWriter2.write(document); // 将代码输出到student3.xml里面(输出的第三种使用方式) XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student3.xml"), format); xmlWriter3.write(document); // 使用FileWriter字符流构造出来的XMLWriter写完之后需要清空缓冲 xmlWriter3.flush(); } }
package com.shengsiyuan.xml.dom4j; import java.io.File; import java.util.Iterator; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.DOMReader; import org.dom4j.io.SAXReader; /** * 使用Dom4J解析XML(student2.xml) * 有两种解析方式:SAXReader和DOMReader,分别做演示 * 类: Dom4JTest2 <br> * 描述: TODO <br> * 作者: * 时间: Dec 11, 2013 1:45:02 PM */ public class Dom4JTest2 { public static void main(String[] args) throws Exception { // 第一种解析方式:SAXReader SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(new File("student2.xml")); Element root = doc.getRootElement(); System.out.println("root element: " + root.getName()); // 获得所有的子元素,不包括空白 List childList = root.elements(); System.out.println(childList.size()); // 获得名称为hello的子元素列表 List childList2 = root.elements("hello"); System.out.println(childList2.size()); // 返回以hello作为标签名的第一个元素(因为标签名称为hello的元素可能有多个) Element first = root.element("hello"); // 打印此标签元素里面名称为age的属性的值 System.out.println(first.attributeValue("age")); // 迭代根元素里面的所有子元素 for (Iterator iter = root.elementIterator(); iter.hasNext();) { Element e = (Element) iter.next(); System.out.println(e.attributeValue("age")); } System.out.println("-----------------------------------------"); // 第二种解析方式:DOMReader // 记得在刚开始我们用DOM或SAX(JAXP)解析XML的时候使用的是org.w3c.dom.Document,但是当时感觉这两种方式直接解析XML的话非常繁琐、非常费劲。这里我们是用Dom4J在解析, // 而Dom4J里面也恰好有一个同名的类org.dom4j.Document,我们在这里解析的方式是将org.w3c.dom.Document对象转换成org.dom4j.Document然后再使用Dom4J进行解析。 // 首先下面三步是获得student2.xml文档的org.w3c.dom.Document对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); org.w3c.dom.Document document = db.parse(new File("student2.xml")); DOMReader domReader = new DOMReader(); // 将JAXP的org.w3c.dom.Document转换为Dom4J的org.dom4j.Document Document d = domReader.read(document); Element rootElement = d.getRootElement(); System.out.println(rootElement.getName()); } }
附属类:student2.xml:
<?xml version="1.0" encoding="UTF-8"?> <student name="zhangsan"> <hello age="20">hello</hello> <world>world</world> </student>
笔记:
1、对于JDOM的Format类的getRawFormat()方法,通常用于XML数据的网络传输,因为这种格式会去掉所有不必要的空白,因此能够减少网络传输的数据量。
- xml_6.zip (366.8 KB)
- 下载次数: 9
发表评论
-
领域精通涉及技术点(不分先后)
2017-12-20 19:35 563Java8 netty jvm kafaka消息队列 上传下载 ... -
计算机各种单位讲解及换算
2017-12-13 13:54 1545我还听过有UK的 一、最小单位:位(bit,缩写为b) 在原 ... -
JAVA字符串格式化-String.format()和MessageFormat的使用
2017-12-05 10:39 1280String.format()常规类型的格式化 Stri ... -
eclipse启动项目常见问题
2017-11-16 17:46 1139今儿遇到了个问题,ecli ... -
字符编码笔记:ASCII,Unicode和UTF-8
2017-10-23 16:37 420讲的太牛逼了: http://ww ... -
emoji简单讲解
2017-10-23 15:17 915emoji处理方式大起底 http://blog.csdn.n ... -
BigDecimal讲解
2017-10-12 15:58 401BigDecimal 由任意精度的整数非标度值 和 32 位的 ... -
eclips 控制台console上不打印信息
2017-09-06 21:53 5371、进windows菜单 -> show view -& ... -
详解RequestMappingHandlerMapping和RequestMappingHandlerAdapter
2017-08-29 17:08 2910http://donald-draper.iteye.com/ ... -
用@ExceptionHandler 来进行切面异常处理
2017-08-29 11:47 2225有时候我们想处理某个类里Controller中抛出的异常怎么搞 ... -
Spring 注解@Component、@Repository、@Service、@Controller区别
2017-08-28 15:27 963spring 2.5 中除了提供 @Com ... -
线程的一点小总结
2017-08-23 20:36 660java中main方法启动的是一个进程还是一个线程? 答:是一 ... -
线程池
2017-08-23 17:35 476诸如Web 服务器、数据库 ... -
Class源码大概讲解
2017-08-23 16:47 476http://blog.csdn.net/a327369238 ... -
Spring 事务相关
2017-08-14 12:10 436Transactionz注解的readOnly ... -
把时间当做朋友-前言
2017-08-13 20:47 364要管理的不是时间,而是自己。人们生活在同一个世界,却又各自 ... -
单例里面的方法讲解
2017-08-11 14:55 456spring里的controller是单例的。系统针对每个co ... -
eclipse拷贝出来的项目名称还是原来的
2017-07-26 16:46 1030需要修改的有如下几个地方: 1、pom.xml里面打包的名字一 ... -
自定义hibernate方言,新增自定义函数
2017-06-27 10:47 842按位与运算(&)在许多数据库中都是支持的,遗憾的是,H ... -
http请求参数:header body paramter三种参数区别、联系
2017-06-19 10:46 477112345
相关推荐
java 解析xml 方法 sax jdom dom stAX
DOM、JDOM、DOM4J解析XML实例
用用4中方式(dom4j、jdom、dom、sax)解析xml
xml数据前后台解析;提供了两种方式:dom4j与jdom对xml文件、xml字符串的读与写操作;同时实现在前台用jquery解析xml,将数据展示在页面上,程序可以跑
xml doc sax jdom dom4j完全讲解xml doc sax jdom dom4j完全讲解 xml doc sax jdom dom4j完全讲解 xml doc sax jdom dom4j完全讲解 xml doc sax jdom dom4j完全讲解 xml doc sax jdom dom4j完全讲解 xml doc sax ...
XML解析四种解析方式 DOM SAX JDOM DOM4J
java中四种操作(dom、sax、jdom、dom4j)xml方式详解与
XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细XML的四种解析器原理及性能比较,超详细
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...
JAVA解析XML文件的其中两种方式,利用dom4j.jar及JDOm.jar两种JAR包解析
用DOM SAX JDom dom4j 对xml文档解析实例 在学习孙鑫老师视频教程,自己照着敲的源码,希望对大家有帮助
Java解析XML汇总DOM_SAX_JDOM_DOM4j_XPath 实例
Java 四种方式操作xml,包括xml,dom,sax,jdom这四种方式的一个简单例子。
NULL 博文链接:https://fangguanhong.iteye.com/blog/1988217
java语言操作xml(dom4j) 包括xml的创建、生成、修改
DOM、JDOM、DOM4J解析XML实例.pdf
dom4j解析xml文件的压缩包,完整版。对jdom进行了封装。包含源码,jar包以及所需的全部内容。
本文列举了jdom和jdom4j解析xml文档的常用方法,根据实际操作进行总结出xml操作技术与方法。
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...