`
SunnyYoona
  • 浏览: 367254 次
社区版块
存档分类
最新评论

[Java开发之路](12)JDOM和DOM4J解析XML文档

 
阅读更多
1. JDOM解析XML文档

1.1 简介

JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档将是一件轻松、简单的事。

JDOM帮助文档 :http://www.jdom.org/docs/apidocs/

Jar包下载地址:点击打开链接

1.2 解析步骤

(1)创建SAXBuilder对象
SAXBuilder saxBuilder = new SAXBuilder();
(2)创建输入流对象并将XML文档加载到输入流中
FileInputStream inputStream = new FileInputStream("D:\\bookstore.xml");
(3)通过saxBuilder对象的build方法将输入流加载到saxBuilder中(注意:Document 所引用的包是org.jdom2.Document;)
Document document = saxBuilder.build(inputStream);
(4)通过document对象获取XML文档的根节点
Element rootElement = document.getRootElement();
(5)根据根节点获取根节点下的子节点集合
List<Element> bookList = rootElement.getChildren();
(6)根据节点获取属性节点集合
List<Attribute> attrList = book.getAttributes();
(7)根据节点(元素节点或者属性节点)获取节点名称和节点值
// 属性名称
node.getName();
// 属性值
node.getValue();
1.3 主要方法

(1)返回文档的根节点
public Element getRootElement()
// document为Document对象
Element rootElement = document.getRootElement();
(2)返回节点的所有子节点的集合
public java.util.List<Element> getChildren()
// rootElement为Element对象
List<Element> bookList = rootElement.getChildren();
(3)返回节点的所有属性节点的集合
public java.util.List<Attribute> getAttributes()
// book为Element对象
List<Attribute> attrList = book.getAttributes()
(4)根据子节点的名称返回节点的子节点
public Element getChild(java.lang.String cname)
Element titleElement = book.getChild("title");
(5)返回节点的名称
public java.lang.String getName()
// titleElement为title节点
titleElement.getName();
(6)返回节点值
public java.lang.String getValue()、
titleElement.getValue()
DOM方式getNodeValue() 对于元素节点时返回null。不同于DOM方式,JDOM无论是属性节点还是元素节点都会返回节点对应的文本值。
<author>Scott Meyers</author>
对于这个节点来说,DOM的getNodeValue()返回null,JDOM的getValue()返回"Scott Meyers"。

1.3 具体实例

package com.qunar.xml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
/**
* JDOM解析XML文档
* @author sjf0115
*
*/
public class JDOMXMLCode {
public static void main(String[] args) {
try {
// 创建SAXBuilder对象
SAXBuilder saxBuilder = new SAXBuilder();
// 创建输入流对象并将XML文档加载到输入流中
FileInputStream inputStream = new FileInputStream("D:\\bookstore.xml");
// 通过saxBuilder对象的build方法将输入流加载到saxBuilder中
Document document = saxBuilder.build(inputStream);
// 通过document对象获取XML文档的根节点
Element rootElement = document.getRootElement();
// 根据根节点获取根节点下的子节点集合
List<Element> bookList = rootElement.getChildren();
// 遍历子节点
for (Element book : bookList) {
System.out.println("开始解析一本书...");
// 解析属性
List<Attribute> attrList = book.getAttributes();
for (Attribute attribute : attrList) {
// 属性名称
System.out.print("---" + attribute.getName() + ":");
// 属性值
System.out.println(attribute.getValue());
}//for
// 获取book节点下的子节点
List<Element> bookChildren = book.getChildren();
for (Element bookChild : bookChildren) {
// 节点名称
System.out.print("------" + bookChild.getName() + ":");
// 节点值
System.out.println(bookChild.getValue());
}//for
System.out.println("结束解析一本书...");
}//for
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}


运行结果:

开始解析一本书...
---category:Java
------title:Java多线程编程核心技术
------author:高洪岩
------year:2015
------price:69.00
结束解析一本书...
开始解析一本书...
---category:C++
------title:EffectiveC++:55SpecificWaystoImproveYourProgramsandDesigns
------author:ScottMeyers
------year:2006
------price:58.00
结束解析一本书...
开始解析一本书...
---category:Web
------title:LearningXML
------author:ErikT.Ray
------year:2016
------price:39.95
结束解析一本书...


2. DOM4J解析XML文档

2.1 简介

DOM4J是一个Java的XML API,类似于JDOM,用来读写XML文件的。DOM4J是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。如今可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。

Jar包下载地址:点击打开链接

2.2解析

(1)创建SAXReader对象
SAXReader saxReader = new SAXReader();
(2)通过SaxReader对象的read方法加载XML文档获取Document对象
Document document = saxReader.read(new File("D:\\bookstore.xml"));
(3)通过Document对象获取根节点
Element bookstore = document.getRootElement();
(4)通过Element对象的elementIterator方法获取迭代器
Iterator iterator = bookstore.elementIterator();
(5)遍历迭代器获取根节点的信息
while (iterator.hasNext()) {
// 获取下一个子节点
Element book = (Element)iterator.next();
}
(6)获取属性节点的属性名称和属性值
// 获取book的属性节点集合
List<Attribute> bookAttr = book.attributes();
// 遍历book属性节点
for (Attribute attribute : bookAttr) {
// 获取book的属性节点的属性名称以及属性值
System.out.println("name:" + attribute.getName() + " value:" + attribute.getValue());
}//for
(7)获取元素节点的节点名称和对应的文本值
Iterator ite = book.elementIterator();
// 遍历book节点的子节点
while(ite.hasNext()){
// book节点的子节点
Element bookChild = (Element)ite.next();
System.out.println("name:" + bookChild.getName() + " value:" + bookChild.getStringValue());
//System.out.println("name:" + bookChild.getName() + " value:" + bookChild.getText());
}//while

2.3 具体案例

package com.qunar.xml;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class DOM4JXMLCode {
public static void main(String[] args) {
try {
// 创建SAXReader对象
SAXReader saxReader = new SAXReader();
// 通过SaxReader对象的read方法加载XML文档获取Document对象
Document document = saxReader.read(new File("D:\\bookstore.xml"));
// 通过Document对象获取根节点
Element bookstore = document.getRootElement();
// 通过Element对象的elementIterator方法获取迭代器
Iterator iterator = bookstore.elementIterator();
// 遍历根节点的子节点
while (iterator.hasNext()) {
System.out.println("开始解析一本书...");
// 获取下一个元素节点
Element book = (Element)iterator.next();
// 获取book的属性节点集合
List<Attribute> bookAttr = book.attributes();
// 遍历book属性节点
for (Attribute attribute : bookAttr) {
// 获取book的属性节点的属性名称以及属性值
System.out.println("name:" + attribute.getName() + " value:" + attribute.getValue());
}//for
Iterator ite = book.elementIterator();
// 遍历book节点的子节点
while(ite.hasNext()){
// book节点的子节点
Element bookChild = (Element)ite.next();
System.out.println("name:" + bookChild.getName() + " value:" + bookChild.getStringValue());
//System.out.println("name:" + bookChild.getName() + " value:" + bookChild.getText());
}//while
System.out.println("结束解析一本书...");
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
运行结果:

开始解析一本书...
name:categoryvalue:Java
name:titlevalue:Java多线程编程核心技术
name:authorvalue:高洪岩
name:yearvalue:2015
name:pricevalue:69.00
结束解析一本书...
开始解析一本书...
name:categoryvalue:C++
name:titlevalue:EffectiveC++:55SpecificWaystoImproveYourProgramsandDesigns
name:authorvalue:ScottMeyers
name:yearvalue:2006
name:pricevalue:58.00
结束解析一本书...
开始解析一本书...
name:categoryvalue:Web
name:titlevalue:LearningXML
name:authorvalue:ErikT.Ray
name:yearvalue:2016
name:pricevalue:39.95
结束解析一本书...







分享到:
评论

相关推荐

    jdom+dom4j解析xml.docx

    本文列举了jdom和jdom4j解析xml文档的常用方法,根据实际操作进行总结出xml操作技术与方法。

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    xml.rar_dom4j xml

    java DOM JDOM DOM4J解析Xml文档

    jdom1.1.3xml解析工具类

    org.jdom包含了所有的xml文档要素的java类 org.jdom.adapters包含了与dom适配的java类 org.jdom.filter包含了xml文档的过滤器类 org.jdom.input包含了读取xml文档的类 org.jdom.output包含了写入xml文档的类 org....

    dom4j-1.6.1 + w3cschool.CHM离线帮助文档

    dom4j 目录的介绍: 1)docs 是文档目录 2)如何查 Dom4j 的文档 3)Dom4j 快速入门 2)lib 目录 ...第三方的解析: jdom 在 dom 基础上进行了封装、 dom4j 又对 jdom 进行了封装。 pull 主要用在 And

    javaweb 解析xml

    java web高级第一章,了解dom解析xml文档,掌握jdom和dom4j解析xml文档

    JDOM(java)使用详解及实例

    1、org.JDOM这个包里的类是你J解析xml文件后所要用到的所有数据类型。 Attribute CDATA Coment DocType Document Element EntityRef Namespace ProscessingInstruction Text 2、org.JDOM.transform在涉及...

    4种解析xml文件 实例

    Java解析XML的四种方法 1. DOM生成和解析XML文档 2. SAX生成和解析XML文档 3. DOM4J生成和解析XML文档 4. JDOM生成和解析XML

    Java解析XML的jar包+四种解析方法

    java解析xml的四种方法的比较,还有四种方法所用到的jar包 附带程序例子 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    dom4j-2.1.3下载.rar

    xml工具包,用来解析xml文档 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,...

    java的XML四种解析方法汇总

    JAVA xml 的四种解析方式,(1)Dom生成和解析XML文档 (2)SAX生成和解析XML文档(3)DOM4J生成和解析XML文档 (4)JDOM生成和解析XML

    jdom.jar dom4j.jar sax.jar

    java解析、输出xml文档需要的几个jar包 jdom.jar dom4j.jar sax.jar

    java解析xml文档的性能测试

    java解析xml文档模型的性能测试程序,里面包括程序源代码,测试分析文档,当然自然也包括了各种文档模型的使用方法。有dom4j,jdom,xerces,xpp,exml,crimson等,大家可以下载学习,并进一步测试。

    java解析xml及4种常用解析比较

    SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员...

    xml在java环境中生成解析

    这个是jdom dom4j 解析XML 生成XML 的一些示例 里面有我对XML应用的 文档 还有架包

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    使用java语言对XML文档进行解析的示例,包括DOM,SAX方式,并包括使用jdom和jom4j框架进行XML解析或生成XML文档

    jdom-1.1.3.jar包用于解析XML文件

    使用Jdom.jar包解析XML文件,JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合...

    xml的JAVA解析与格式定义

    解析器的介绍 文档对象模型(DOM)解析实例 SAX解析实例 DOM4J解析实例 JDOM解析实例 JAVA操纵XML 实例讲解

    XML解析教程

    JDOM(注意JDOM决不是DOM扩展,虽然名字差不多,但两者平行的关系 )是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM的目的是成为Java特定文档模型,它简化与XML...

    java xml 增删改查

    目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J. 2:JDOM 和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还...

Global site tag (gtag.js) - Google Analytics