`

"java xml 四"之JDOM、DOM4J解析XML总结

阅读更多
上面我们已经学习了DOM和SAX两种解析XML的方式,但是总体来说,感觉这两种方式还是不太方便,解析起来非常费劲,非常繁琐,不是特别令人满意。所以现在在开源的世界里面,很多人或是很多社区已经帮助我们实现出来了针对XML解析的这些库,我们可以直接拿来用。经历过上面的DOM和SAX那么繁琐的解析方式之后,下面要讲的这些解析方式使用起来非常简单,非常方便。学习起来比较简单,经历过痛苦之后尝到甜头了。下面讲的这些解析方式在实际开发里面用的非常多,实际开发里面其实很少有人直接用JAXP(DOM或SAX)这种解析方式,但是它是基础,必须会
下面要讲解的实际开发中常用的使用起来非常简单的解析方式有JDOMDOM4J两种:
首先讲解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的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细

    常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和开发效率有很大影响。 1. DOM 解析器 DOM(Document Object Model)是 W3C 官方标准,用于表示...

    xml数据前后台解析:jdom与dom4j源码,程序可以跑

    本文将深入探讨XML数据在前后台解析的过程中,重点介绍两种主流的Java XML解析库——JDOM和DOM4J,并提供实际运行的程序示例。同时,我们还会讨论如何使用jQuery在前端解析XML并展示数据。 首先,让我们了解XML的...

    \"java xml 四\"之JDOM、DOM4J解析XML总结

    本篇文章主要聚焦于Java中解析XML的两种流行库——JDOM和DOM4J的总结。我们将深入探讨它们的工作原理、优缺点以及如何在实际项目中使用它们。 首先,让我们了解一下JDOM。JDOM是Java专门针对XML设计的一个解析库,...

    JAVA 解析XML 的JAr包 DOM4j.Jar JDOM.jar

    在Java编程语言中,...总结,Java中的XML解析有多种方法,DOM4j和JDOM是其中两个流行的库,它们都提供了方便的API来创建、读取、修改和写入XML文档。开发者可以根据项目的具体需求和性能要求,选择合适的XML解析库。

    java xml 4 种 解析xml 方法 sax jdom dom stAX

    为了处理XML文档,Java提供了多种解析方法,包括SAX(Simple API for XML)、JDOM(Java Document Object Model)、DOM(Document Object Model)以及stAX(Streaming API for XML)。下面将详细介绍这四种解析XML的...

    XML四种解析方式------DOM SAX JDOM DOM4J

    在处理XML文档时,有多种解析方式,包括DOM、SAX、JDOM和DOM4J。每种解析方式都有其特性和适用场景,下面将详细探讨这四种解析方法。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,形成一...

    用DOM SAX JDom dom4j 对xml文档解析实例

    本文将深入探讨DOM、SAX、JDom和dom4j四种流行的Java XML解析器,以及它们在处理XML文档时的特点和用法。 1. DOM(Document Object Model) DOM是W3C推荐的一种解析XML的标准方法。它将XML文档表示为一个树形结构,...

    java操作xml dom dom4j sax jdom

    为了处理XML文档,Java提供了多种API,其中最常用的包括DOM、SAX、DOM4J和JDOM。以下是对这些方法的详细介绍: 1. DOM(Document Object Model) DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个...

    java中四种操作(dom、sax、jdom、dom4j)xml方式详解与比较.txt )

    java中四种操作(dom、sax、jdom、dom4j)xml方式详解与

    dom4j解析xml文件的压缩包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、查询和修改变得简单。这个压缩包包含了DOM4J的完整版本,适用于那些希望在Java项目中使用DOM4J进行XML操作的开发者...

    xml(jdom-dom4j).rar_DOM4J_dom4j xml java

    DOM4J是Java中一个非常流行的XML处理库,它提供了灵活且高效的API,使得开发者能够轻松地进行XML的解析、创建、修改等操作。在Java领域,XML常用于数据交换、配置存储以及文档生成等场景,因此理解并掌握DOM4J对于...

    DOM、JDOM、DOM4J解析XML实例

    ### DOM、JDOM、DOM4J解析XML实例 #### DOM解析XML DOM(Document Object Model)是一种树形结构的数据模型,用于表示XML或HTML文档。它允许程序在内存中加载整个文档,并通过提供的API来访问和修改文档中的任何...

    生成、解析xml的四种方式(dom,dom4j,sax,jdom)

    本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...

    java dom4j解析xml

    Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...

    dom4j.jar包,java解析xml dom4j.jar包

    总结来说,DOM4J是Java开发中处理XML文档的强大工具,无论是在解析、查询还是修改XML方面,都提供了高效的解决方案。结合其轻量级的设计和对XPath的支持,DOM4J成为了Java开发者的首选XML库之一。

    dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。下载地址 .txt

    dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...

    XML解析技术DOM4J解析

    DOM4J的开发目标与JDOM相似,即提供易于使用且直观的操作体验,但DOM4J更进一步,旨在成为解决所有Java/XML问题的完整方案。为了达到这一目标,DOM4J在防止应用程序错误方面可能不如JDOM那么严格,但它的灵活性和...

    XML解析的四种方法源码(DOM, JDOM ,DOM4J , SAX)

    在Java中,解析XML文件是常见的任务,通常有四种主要的方法:DOM (Document Object Model),JDOM,DOM4J以及SAX (Simple API for XML)。以下是对这四种XML解析方式的详细介绍: 1. DOM解析: DOM是一种树形结构的...

    java 操作xml(dom,sax,jdom,dom4j)需要的包

    在Java中,有多种方式来解析和操作XML文档,包括DOM(Document Object Model)、SAX(Simple API for XML)、JDOM和DOM4J。每种方法都有其特点和适用场景,相应的,它们也需要引入特定的库文件。以下是对这些方法...

    dom4j解析XML所需jar包

    Jaxen可以与多种XML解析器(如DOM、DOM4J、JDOM等)协同工作,提供跨平台的XPath支持。 总结来说,DOM4J是一个全面且易用的XML处理工具,广泛应用于Java开发中。通过`dom4j-1.6.1.jar`和`jaxen-1.1.1.jar`这两个jar...

Global site tag (gtag.js) - Google Analytics