### Dom4j遍历解析XML知识点详解 #### 一、Dom4j简介及环境搭建 Dom4j(Document Object Model for Java)是一个Java语言的开源XML API,它提供了非常便捷的方式来解析、创建以及操作XML文档。相较于其他XML解析库如SAX、JDOM等,Dom4j具有更强大的功能与更好的性能。 为了使用Dom4j,我们需要添加其依赖到项目中。根据题目提供的标签信息,可以知道需要以下两个JAR包: - `dom4j-1.6.1.jar`:这是Dom4j的核心库。 - `jaxen-1.1-beta-6.jar`:该库提供了XPath支持,用于执行复杂的XML查询。 #### 二、XML文档示例 题目中的XML文档是一个简单的人员信息记录,包含以下结构: ```xml <doc> <person id="1" sex="m"> <name>zhangsan</name> <age>32</age> <adds> <add code="home">homeadd</add> <add code="com">comadd</add> </adds> </person> <person id="2" sex="w"> <name>lisi</name> <age>22</age> <adds> <add ID="22" id="23" code="home">homeadd</add> <add ID="23" id="22" code="com">comadd</add> <add id="24" code="com">comadd</add> </adds> </person> </doc> ``` #### 三、Dom4j核心API解析XML 接下来将详细介绍如何使用Dom4j来解析上述XML文档。 1. **读取XML文档** 使用`SAXReader`类可以方便地读取XML文件。在示例代码中,通过`TestDom4j.class.getResourceAsStream(xmlFilePath)`获取输入流,并调用`SAXReader.read(InputStream)`方法进行解析。 ```java SAXReader reader = new SAXReader(); InputStream in = TestDom4j.class.getResourceAsStream(xmlFilePath); Document document = reader.read(in); ``` 2. **获取根元素** 一旦解析完成,可以通过`Document.getRootElement()`获取XML文档的根元素。在这个例子中,根元素是`doc`。 ```java Element root = document.getRootElement(); ``` 3. **遍历元素** 可以通过`Element.elementIterator()`或`Element.elements()`方法遍历某个元素的所有子元素。 ```java Iterator<Element> i_pe = root.elementIterator(); while (i_pe.hasNext()) { Element e_pe = i_pe.next(); // 处理每个子元素 } ``` 4. **获取属性值** 每个`Element`对象都可以获取其属性值,例如: ```java String id = e_pe.attributeValue("id"); String sex = e_pe.attributeValue("sex"); ``` 5. **获取文本内容** 要获取元素的文本内容,可以直接调用`Element.getText()`方法。 ```java String name = e_pe.element("name").getText(); String age = e_pe.element("age").getText(); ``` 6. **构建结果字符串** 在遍历过程中,通常会将获取的信息构建为字符串形式以便后续处理。 ```java StringBuffer sb = new StringBuffer(); sb.append("通过Dom4j解析XML,结果如下:\n"); sb.append(xmlFileName + "\n"); sb.append("----------------start----------------\n"); ``` 7. **完整示例代码** 下面是完整的示例代码,展示了如何使用Dom4j解析并遍历上述XML文档。 ```java public class TestDom4j { public static void main(String[] args) { String xmlFileName = "/path/to/your/xml/file.xml"; parseAndPrintXMLData(xmlFileName); } public static void parseAndPrintXMLData(String xmlFileName) { Document document = parse2Document(xmlFileName); Element root = document.getRootElement(); StringBuffer sb = new StringBuffer(); sb.append("通过Dom4j解析XML,结果如下:\n"); sb.append(xmlFileName + "\n"); sb.append("----------------start----------------\n"); Iterator<Element> i_pe = root.elementIterator(); while (i_pe.hasNext()) { Element e_pe = i_pe.next(); String person = e_pe.getName(); String id = e_pe.attributeValue("id"); String sex = e_pe.attributeValue("sex"); String name = e_pe.element("name").getText(); String age = e_pe.element("age").getText(); sb.append(person + ":\n"); sb.append("ID: " + id + ", Sex: " + sex + "\n"); sb.append("Name: " + name + ", Age: " + age + "\n"); // 处理其他子元素 Iterator<Element> i_adds = e_pe.element("adds").elementIterator(); while (i_adds.hasNext()) { Element e_add = i_adds.next(); String addCode = e_add.attributeValue("code"); String addText = e_add.getText(); sb.append("Add (" + addCode + "): " + addText + "\n"); } } System.out.println(sb.toString()); } private static Document parse2Document(String xmlFilePath) { SAXReader reader = new SAXReader(); InputStream in = TestDom4j.class.getResourceAsStream(xmlFilePath); try { return reader.read(in); } catch (DocumentException e) { e.printStackTrace(); return null; } } } ``` 通过以上步骤,我们可以看到如何使用Dom4j库来解析和遍历XML文档,提取其中的数据,并进行相应的处理。这种方式非常适合于需要对XML数据进行复杂递归处理的情况。
Dom4j-1.6.1
Dom4j解析需要XML需要的最小类库为:
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar
目标:
解析一个xml,输出所有的属性和元素值。
测试代码:
XML文件:
<?xml version="1.0" encoding="GBK"?>
<doc>
<person id="1" sex="m">
<name>zhangsan</name>
<age>32</age>
<adds>
<add code="home">home add</add>
<add code="com">com add</add>
</adds>
</person>
<person id="2" sex="w">
<name>lisi</name>
<age>22</age>
<adds>
<add ID="22" id="23" code="home">home add</add>
<add ID="23" id="22" code="com">com add</add>
<add id="24" code="com">com add</add>
</person>
</doc>
解析代码:
package com.topsoft.test;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import java.util.Iterator;
import java.util.List;
import java.io.InputStream;
/**
* Created by IntelliJ IDEA.<br>
* <b>User</b>: leizhimin<br>
* <b>Date</b>: 2008-3-26 15:53:51<br>
* <b>Note</b>: Dom4j遍历解析XML测试
*/
public class TestDom4j {
/**
* 获取指定xml文档的Document对象,xml文件必须在classpath中可以找到
*
* @param xmlFilePath xml文件路径
* @return Document对象
剩余5页未读,继续阅读
- 软件科学研究院2014-04-02我觉得这个真心的不错,希望大家不要错过哦
- 粉丝: 0
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助