`
zhaoshijie
  • 浏览: 2261826 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

dom4j 遍历解析XML

阅读更多
原文出处:http://lavasoft.blog.51cto.com/62575/66953

Dom4j遍历解析XML测试近来老和XML打交道,不深挖不行了。。这是一个Dom4j解析XML的例子,为做复杂递归处理前期所写的例子。涵盖了XML的解析方面大部分核心API。环境:Dom4j-1.6.1Dom4j解析需要XML需要的最小类库为:dom4j-1.6.1.jarjaxen-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>
        </adds>
    </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对象
     */
    public static Document parse2Document(String xmlFilePath) {
         SAXReader reader = new SAXReader();
         Document document = null;
        try {
             InputStream in = TestDom4j.class.getResourceAsStream(xmlFilePath);
             document = reader.read(in);
         } catch (DocumentException e) {
             System.out.println(e.getMessage());
             System.out.println("读取classpath下xmlFileName文件发生异常,请检查CLASSPATH和文件名是否存在!");
             e.printStackTrace();
         }
        return document;
     }

    public static void testParseXMLData(String xmlFileName) {
        //产生一个解析器对象
         SAXReader reader = new SAXReader();
        //将xml文档转换为Document的对象
         Document document = parse2Document(xmlFileName);
        //获取文档的根元素
         Element root = document.getRootElement();
        //定义个保存输出xml数据的缓冲字符串对象
         StringBuffer sb = new StringBuffer();
         sb.append("通过Dom4j解析XML,并输出数据:\n");
         sb.append(xmlFileName + "\n");
         sb.append("----------------遍历start----------------\n");
        //遍历当前元素(在此是根元素)的子元素
        for (Iterator i_pe = root.elementIterator(); i_pe.hasNext();) {
             Element e_pe = (Element) i_pe.next();
            //获取当前元素的名字
             String person = e_pe.getName();
            //获取当前元素的id和sex属性的值并分别赋给id,sex变量
             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("\tid=" + id + " sex=" + sex + "\n");
             sb.append("\t" + "name=" + name + " age=" + age + "\n");

            //获取当前元素e_pe(在此是person元素)下的子元素adds
             Element e_adds = e_pe.element("adds");
             sb.append("\t" + e_adds.getName() + "\n");

            //遍历当前元素e_adds(在此是adds元素)的子元素
            for (Iterator i_adds = e_adds.elementIterator(); i_adds.hasNext();) {
                 Element e_add = (Element) i_adds.next();
                 String code = e_add.attributeValue("code");
                 String add = e_add.getTextTrim();
                 sb.append("\t\t" + e_add.getName() + ":" + " code=" + code + " value=\"" + add + "\"\n");
             }
             sb.append("\n");
         }
         sb.append("-----------------遍历end-----------------\n");
         System.out.println(sb.toString());


         System.out.println("---------通过XPath获取一个元素----------");
         Node node1 = document.selectSingleNode("/doc/person");
         System.out.println("输出节点:" +
                "\t"+node1.asXML());

         Node node2 = document.selectSingleNode("/doc/person/@sex");
         System.out.println("输出节点:" +
                "\t"+node2.asXML());

         Node node3 = document.selectSingleNode("/doc/person[name=\"zhangsan\"]/age");
         System.out.println("输出节点:" +
                "\t"+node3.asXML());

         System.out.println("\n---------XPath获取List节点测试------------");
         List list = document.selectNodes("/doc/person[name=\"zhangsan\"]/adds/add");
        for(Iterator it=list.iterator();it.hasNext();){
             Node nodex=(Node)it.next();
             System.out.println(nodex.asXML());
         }

         System.out.println("\n---------通过ID获取元素的测试----------");
         System.out.println("陷阱:通过ID获取,元素ID属性名必须为“大写ID”,小写的“id”会认为是普通属性!");
         String id22 = document.elementByID("22").asXML();
         String id23 = document.elementByID("23").asXML();
         String id24 = null;
        if (document.elementByID("24") != null) {
             id24 = document.elementByID("24").asXML();
         } else {
             id24 = "null";
         }

         System.out.println("id22=   " + id22);
         System.out.println("id23=   " + id23);
         System.out.println("id24=   " + id24);
     }


    public static void main(String args[]) {
         testParseXMLData("/person.xml");
     }
}运行结果:通过Dom4j解析XML,并输出数据:
/person.xml
----------------遍历start----------------
person:
     id=1 sex=m
     name=zhangsan age=32
     adds
   add: code=home value="home add"
   add: code=com value="com add"

person:
     id=2 sex=w
     name=lisi age=22
     adds
   add: code=home value="home add"
   add: code=com value="com add"
   add: code=com value="com add"

-----------------遍历end-----------------

---------通过XPath获取一个元素----------
输出节点:    <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>
输出节点:     sex="m"
输出节点:    <age>32</age>

---------XPath获取List节点测试------------
<add code="home">home add</add>
<add code="com">com add</add>

---------通过ID获取元素的测试----------
陷阱:通过ID获取,元素ID属性名必须为“大写ID”,小写的“id”会认为是普通属性!
id22=  <add ID="22" id="23" code="home">home add</add>
id23=  <add ID="23" id="22" code="com">com add</add>
id24=   null

Process finished with exit code 0
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    dom4j解析xml详解

    ### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...

    dom4j 解析(读取) xml 节点数据

    要开始解析XML文件,首先需要导入DOM4J的相关包: ```java import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; ``` 接下来,我们将创建...

    使用dom4j进行解析XML

    本文将详细介绍如何使用dom4j解析XML,并创建XML文档结构。 首先,我们需要引入dom4j库。如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;dom4j &lt;artifactId&gt;dom4j &lt;version&gt;...

    dom4j解析及生成 xml代码收集

    1. **DOM4J解析XML** - **Document对象**:DOM4J的核心是`Document`对象,它代表整个XML文档。解析XML文件后,DOM4J会构建一个`Document`对象树,你可以通过这个树来访问和操作XML的所有元素。 - **Element对象**...

    使用dom4j和jaxen解析xml

    - **dom4j+jaxen操作XML**:首先使用dom4j解析XML,然后通过jaxen创建XPath对象并执行查询。查询结果可以是元素、属性或其他XML节点,根据需要进行进一步处理。 例如,以下代码展示了如何使用dom4j和jaxen解析XML...

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    1. **解析XML**:DOM4J可以读取XML文件,将其转换为一个树形结构,即Document对象。解析器有SAX和DOM两种模式,SAX是事件驱动的,适用于大文件,而DOM则将整个文档加载到内存中,适合小文件。 2. **创建XML**:DOM4...

    dom4j解析xml,利用反射机制

    在这个项目中,我们利用DOM4J来解析XML文件,并通过Java的反射机制将解析出的信息存储到特定的类中。 首先,我们需要了解XML的基本概念。XML(Extensible Markup Language)是一种标记语言,常用于数据交换和结构化...

    java dom4j解析xml

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

    DOM4J 解析XML

    **DOM4J解析XML** DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活、高效且功能丰富的API,使得XML的读取、创建、修改和查询变得简单易行。DOM4J的主要特点包括对XPath的支持、事件驱动的解析、以及与...

    Java解析xml配置文件,DOM4J解析xml配置文件,提供使用文档和源码下载

    在本教程中,我们将深入探讨如何使用DOM4J解析XML配置文件,并模拟处理`web.xml`中的`url-pattern`元素。 首先,让我们了解DOM4J的基本概念。DOM4J是一个基于Java的DOM模型的XML库,它扩展了标准的DOM API,增加了...

    dom4j解析xml实例

    **DOM4J解析XML实例详解** 在Java编程中,处理XML文档是一项常见的任务。DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML...

    xmldom4j解析

    在“jar包执行20190331.rar”文件中,可能包含了一个Java项目,该项目使用DOM4J库解析XML文件并执行相关业务逻辑。执行此类项目通常涉及以下步骤: 1. 将jar包解压,找到主类(包含main方法)。 2. 使用Java命令行...

    dom4j---xml解析jar包

    在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行的、功能强大的开放源代码库。这个库不仅简化了XML处理,还提供了XPath和XSLT的支持,使其成为Java开发者处理XML的首选工具之一。 **...

    分别使用DOM和DOM4j解析XML文件

    本篇文章将详细介绍如何使用DOM(Document Object Model)和DOM4j这两种流行的方法来解析XML文件。 首先,DOM是一种标准的W3C推荐的解析XML的方法,它将整个XML文档加载到内存中,形成一个树形结构,便于程序进行...

    dom4j解析xml

    **DOM4J解析XML** DOM4J是一个Java库,它为处理XML提供了强大的功能,包括读取、写入、修改和操作XML文档。这个库以其灵活性、效率和易用性而受到开发者的青睐。DOM4J是基于DOM(Document Object Model)的,但它...

    dom4j 解析xml实例

    在这个实例中,我们将深入探讨如何使用DOM4J解析XML文件,并通过`Dom4jTest1.java`这个示例程序来理解其工作原理。 首先,我们需要了解XML(Extensible Markup Language)是一种标记语言,常用于存储和传输数据。...

    java dom4j 解析xml的例子,可用

    解析XML时,DOM4J首先读取XML文件并构建一个节点结构,然后你可以通过API遍历和修改这个结构。例如,你可以通过Element、Attribute、Text等类来访问和修改元素、属性和文本内容。 2. **基本用法**:在Java程序中,...

Global site tag (gtag.js) - Google Analytics