[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:Effective C++: 55 Specific Ways to Improve Your Programs and Designs

------author:Scott Meyers

------year:2006

------price:58.00

结束解析一本书...

开始解析一本书...

---category:Web

------title:Learning XML

------author:Erik T. 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:category   value:Java

name:title   value:Java多线程编程核心技术

name:author   value:高洪岩

name:year   value:2015

name:price   value:69.00

结束解析一本书...

开始解析一本书...

name:category   value:C++

name:title   value:Effective C++: 55 Specific Ways to Improve Your Programs and Designs

name:author   value:Scott Meyers

name:year   value:2006

name:price   value:58.00

结束解析一本书...

开始解析一本书...

name:category   value:Web

name:title   value:Learning XML

name:author   value:Erik T. Ray

name:year   value:2016

name:price   value:39.95

结束解析一本书...

时间: 2024-11-02 10:41:59

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

[Java开发之路](11)SAX解析XML文档

1. 简介 Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档: SAX采用事件驱动的方式解析XML.套用网友的解释:如同在电影院看电影一样,从头到尾看一遍,不能回退(Dom可来来回回读取),在看电影的过程中,每遇到一个情节,都会调用大脑去接收处理这些信息.SAX也是相同的原理,每遇到一个元素节点,都会调用相应的方法来处理.在SAX的解析过程中,读取到文档开头.文档结尾,元素的开头和元素结尾都

[Java开发之路](10)DOM解析XML文档

对象序列化的一个重要限制是它只是Java的解决方案:只有Java程序才能反序列化这种对象.一种更具操作性的解决方案是将数据转化为XML格式,这可以使其被各种各样的平台和语言使用. 1. 简介 DOM 是用与平台和语言无关的方式表示XML文档的官方 W3C 标准.DOM 是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构, 然后才能做任何工作. 由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的.DOM 以

java中四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)_java

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX:http://sourceforge.net/projects/sax/ JDOM:http://jdom.org/downloads/index.html DOM4J:http://sourceforge.net/projects/dom4j/  一.介绍及优缺点分析

java 解析xml文档四种有效的方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transform

jsp解析xml文档之使用 JDOM 读取XML文件

jsp教程解析xml文档之使用 JDOM 读取XML文件 xml文件: <?xml version="1.0" encoding="GB2312"?> <RESULT>   <VALUE>        <NO>A1234</NO>        <ADDR>四川省XX县XX镇XX路X段XX号</ADDR>   </VALUE>   <VALUE>      

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.2 解析XML文档

3.2 解析XML文档 要处理XML文档,就要先解析(parse)它.解析器是这样一个程序:它读入一个文件,确认这个文件具有正确的格式,然后将其分解成各种元素,使得程序员能够访问这些元素.Java库提供了两种XML解析器: 像文档对象模型(Document Object Model, DOM)解析器这样的树型解析器(tree parser),它们将读入的XML文档转换成树结构. 像XML简单API(Simple API for XML, SAX)解析器这样的流机制解析器(streaming pa

一个java解析XML文档的问题

问题描述 最近小弟在项目中遇到一个问题,百思不得其解,还请各路神仙来帮忙.ora.apache.commons.digester.DegestergetgarserSEVEREdigester.getparserjava.lang.UnsupportedoperationException:Thisparserdosenotsupportspecification"null"version"null".由于小弟工作的环境是有安全级别的,打出来的错误信息只能摘抄一部分

java中利用Dom4j解析和生成XML文档_java

一.前言 dom4j是一套非常优秀的Java开源api,主要用于读写xml文档,具有性能优异.功能强大.和非常方便使用的特点.   另外xml经常用于数据交换的载体,像调用webservice传递的参数,以及数据做同步操作等等,   所以使用dom4j解析xml是非常有必要的. 二.准备条件 dom4j.jar 下载地址:http://sourceforge.net/projects/dom4j/ 三.使用Dom4j实战 1.解析xml文档 实现思路: <1>根据读取的xml路径,传递给SAX

在java中使用dom4j解析xml(示例代码)_java

虽然Java中已经有了Dom和Sax这两种标准解析方式 但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心 为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具 鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作 Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了 首先我们需要出创建一个xml文档,然后才能对其解析 xml文档: 复制代码 代码如下: <?xml version="1.0" encoding=&quo