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

Dom4j遍历解析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> 
        </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

    Dom4j遍历解析XMLDom4j遍历解析XML

    dom4j解析及生成 xml代码收集

    dom4j解析及生成 xml代码收集dom4j解析及生成 xml代码收集

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

    此方法解析xml时,不受xml层级的限制。文件中包含了说明文档,java类,以及所使用到的*.jar。并对代码做了注释让你一目了然……

    用dom4j解析xml文件

    一个关于用dom4j解析xml,遍历xml,建立xml的简单例子

    dom4j解析xml字符串

    // 读取并解析XML文档 // SAXReader就是一个管道,用一个流的方式,把xml文件读出来 // // SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档 // Document document = reader.read...

    dom4j解析节点名称和值

    dom4j解析节点名称和值,放入一个string类型的xml字符串输出标签对应的名称以及值的map

    用DOM-MSXML实现解析xml文件

    用DOM-MSXML实现解析xml文件,可以遍历整个xml文件,并将结果以树的形式显示出来,使xml文件的结构一目了然

    易语言模块 XMLDOM 解析 构造 获取 更改 添加 删除 遍历元素 格式化XML

    XML DOM 定义了所有 XML 元素的对象和属性,以及访问它们的方法(接口)。 换句话说:XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。 模块简介: 1、XMLDOMDocument类: XML对象文档 -&gt;操作创建或读写...

    xml-dom4j解析工具类

    这是一个xml工具类,解析jar包用的是dom4j-1.6.1; 主要方法: 1.根据节点名称通过循环遍历获取对应的节点; 2.根据节点名称通过循环遍历获取对应的底层节点集合;

    jdom dom4j sax 的构建和解析xml

    //定义静态方法解析元素所有属性 public static void parseAttribute(Element element) { //step1:获取当前元素的所有属性 List attrs=element.attributes(); //step2:遍历元素的每个属性 for (Object att : ...

    PULL解析xml的demo

    通用性强,它会将XML文件的所有内容读取到内存中,然后使用DOM API遍历XML树、检索所需的数据; 优点:简单直观,但需要将文档读取到内存, 缺点:并不太适合移动设备; 2,SAX SAX是一个解析速度快并且占用内存少的...

    XML解析工具

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API...这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

    TinyXML是一个开源的解析XML的解析库

    这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序...

    Xml的递归遍历

    用java递归dom解析器解析遍历Xml文档

    dom4j-jdom封装和解析例子

    * Dom4j(SAX)读取xml数据(解析) * @param params * @throws Exception */ private static List&lt;Pois&gt; getReaderXml(String flg) throws Exception{ String fromRead=Dom4jTest2.class.getClassLoader...

    Java Dom4jHelper.java XML操作类下载.rar

    Java Dom4jHelper.java XML文件操作类下载,可实现解析xml文档,遍历文档,遍历解析元素,获得根元素,修改xml某节点的值,输出文件路径及文件名,将xml转换为字符串,字符串转换为文档等功能。

    Spring-IOC手动模拟实现-利用dom4解析xml文件

    通过dom4j解析配置文件,得到list集合(存放Bean标签的id和class属性) * 3.通过反射实例化得到对应的实例化对象,放置在map中(map是键值对,可根据id获取值)(遍历list获取对应的class属性,利用class。formName...

    开源xml解析库TingXml。

    目前,对xml的使用非常广泛,读取和设置xml配置文件是我们最常用的操作。常见C/C++ XML解析器有Tinyxml、XERCES、...这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

    XML.rar_c xml_msxml_msxml pudn_msxml xml_xml 解析

    用DOM-MSXML实现解析xml文件,可以遍历整个xml文件,并将结果以树的形式显示出来,使xml文件的结构一目了然。

Global site tag (gtag.js) - Google Analytics