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

2024-02-19 00:18

本文主要是介绍[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
结束解析一本书...







这篇关于[Java开发之路](12)JDOM和DOM4J解析XML文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/722910

相关文章

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

java如何解压zip压缩包

《java如何解压zip压缩包》:本文主要介绍java如何解压zip压缩包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解压zip压缩包实例代码结果如下总结java解压zip压缩包坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2