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

[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
结束解析一本书...







分享到:
评论

相关推荐

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

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

    XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细

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

    DOM、JDOM、DOM4J解析XML实例

    在Java中,使用DOM解析XML文档的一般步骤包括: 1. **创建DocumentBuilderFactory对象**:首先,需要创建一个`DocumentBuilderFactory`实例,它是工厂类,用于创建`DocumentBuilder`实例。 ```java ...

    DOM、JDOM、DOM4J解析XML实例.pdf

    ### DOM、JDOM、DOM4J解析XML实例详解 #### DOM 方式解析 XML 实例解析 ##### 一、DOM 概述与应用实例 DOM(Document Object Model)是一种树状结构的标准,用于表示 XML 文档的数据结构。它将 XML 文档视为节点...

    DOM、SAX、JDOM、DOM4J读写xml文档

    在Java中,有几种不同的API可以用来处理XML文档,包括DOM、SAX、JDOM和DOM4J。下面将详细介绍这四种方式。 **DOM(Document Object Model)** DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个可...

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

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

    dom4j-jar与dom4j解析xml文档介绍

    "dom4j-jar与dom4j解析xml文档介绍" 这个标题告诉我们,我们将探讨的是一个关于dom4j库的jar文件,以及如何使用这个库来解析XML文档。dom4j是一个Java库,它提供了丰富的API用于处理XML、HTML和DOM文档。这里的"jar...

    dom4j解析xml文件的压缩包

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

    java dom4j解析xml

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

    jdom+dom4j解析xml.docx

    为了处理XML文档,有两个流行的库被广泛使用:JDOM和DOM4J。本文将详细讲解这两个库在解析XML时的关键方法和技巧。 首先,我们来看JDOM。JDOM是一个专为Java设计的API,用于处理XML文档。以下是一些核心操作: 1. ...

    SAX, DOM, JDOM, DOM4J解析XML文件

    本文将详细介绍四种在Java中解析XML文件的方法:SAX、DOM、JDOM以及DOM4J。 1. SAX(Simple API for XML) SAX是一种基于事件驱动的解析器,它在读取XML文档时会触发一系列事件,如开始元素、结束元素、字符数据等...

    dom4j解析XML所需jar包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于DOM(Document Object Model)和Java的结合,但它的设计理念比标准DOM更先进...

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

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

    sax,dom,jdom,dom4j之xml解析大荟萃

    在Java中,有多种XML解析器供开发者选择,包括SAX(Simple API for XML)、DOM(Document Object Model)、JDOM和DOM4J。这四种解析方式各有特点,适用于不同的场景。下面我们将详细探讨它们的原理、优缺点以及应用...

    利用 dom4j 解析 xml 文档

    Dom4j是一个基于Java的开源项目,它实现了DOM、SAX和JDOM等解析器的接口,并提供了一种更方便的方式来处理XML文档。它支持XPath查询,能够方便地创建、修改和查询XML结构。 **读取XML文档:** 1. **添加依赖**:在...

    xml(jdom-dom4j).rar_DOM4J_dom4j xml java

    DOM4J是Java中一个非常流行的XML处理库,它提供了...通过学习和掌握DOM4J,Java开发者能够高效地处理XML文档,提升程序的可维护性和扩展性。了解如何创建、生成和修改XML,是成为一名熟练的Java XML程序员的关键步骤。

    Dom4j解析和生成XML文档

    DOM4J解析XML文档: DOM4J通过构建DOM树(Document Object Model)来解析XML。DOM模型是一种将XML文档转换为内存中对象树的表示方式。在DOM4J中,我们可以使用`DocumentBuilderFactory`和`DocumentBuilder`来创建`...

    Jdom、Dom4j 、dom解析xml文件

    在"ParseXml"这个压缩包中,可能包含了示例代码,演示了如何使用JDOM、DOM4J和DOM解析XML文件。通过阅读和理解这些代码,你可以更好地掌握这些库的用法,提升处理XML文件的能力。记得实践是检验理论的最好方式,尝试...

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

    本篇将详细介绍使用DOM4j.Jar和JDOM.jar这两个Java库来解析XML文件的方法。 **DOM4j** DOM4j是一个灵活且功能强大的Java XML API,它提供了全面的XML处理解决方案,包括读取、写入、操作和转换XML文档。DOM4j的...

Global site tag (gtag.js) - Google Analytics