• Java XML解析工具 dom4j介绍及使用实例


     

    Java XML解析工具 dom4j介绍及使用实例

     

    dom4j介绍

      dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory

      dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。

     

    dom4j的使用

      下载了dom4j项目之后,解压缩,将其jar包(我的当前版本叫做dom4j-1.6.1.jar)加入class path下面。

      (Properties->Java Build Path -> Add External JARs...)。

      之后就可以使用其提供的API进行编程。

     

    程序实例1

      第一个程序,用Java代码生成xml文档,代码如下:

     

    复制代码
    package com.example.xml.dom4j;
    
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;
    
    /**
     * dom4j框架学习 使用dom4j框架创建xml文档并输出保存
     * 
     */
    public class Dom4JTest1
    {
    
        public static void main(String[] args) throws Exception
        {
            // 第一种方式:创建文档,并创建根元素
            // 创建文档:使用了一个Helper类
            Document document = DocumentHelper.createDocument();
    
            // 创建根节点并添加进文档
            Element root = DocumentHelper.createElement("student");
            document.setRootElement(root);
    
            // 第二种方式:创建文档并设置文档的根元素节点
            Element root2 = DocumentHelper.createElement("student");
            Document document2 = DocumentHelper.createDocument(root2);
    
            // 添加属性
            root2.addAttribute("name", "zhangsan");
            // 添加子节点:add之后就返回这个元素
            Element helloElement = root2.addElement("hello");
            Element worldElement = root2.addElement("world");
    
            helloElement.setText("hello Text");
            worldElement.setText("world text");
    
            // 输出
            // 输出到控制台
            XMLWriter xmlWriter = new XMLWriter();
            xmlWriter.write(document);
    
            // 输出到文件
            // 格式
            OutputFormat format = new OutputFormat("    ", true);// 设置缩进为4个空格,并且另起一行为true
            XMLWriter xmlWriter2 = new XMLWriter(
                    new FileOutputStream("student.xml"), format);
            xmlWriter2.write(document2);
    
            // 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白
            XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student2.xml"),
                    format);
            xmlWriter3.write(document2);
            xmlWriter3.flush();
            // close()方法也可以
    
        }
    }
    复制代码

     

      程序Console输出:

    <?xml version="1.0" encoding="UTF-8"?>
    <student/>

      生成的一个xml文档:

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    
    <student name="zhangsan">
        <hello>hello Text</hello>
        <world>world text</world>
    </student>
    复制代码

     

     

     

     

    程序实例2

      程序实例2,读入xml文档并分析,将其内容输出。

      首先,待分析的文档如下:

     

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    
    <students name="zhangsan">
        <hello name="lisi">hello Text1</hello>
        <hello name="lisi2">hello Text2</hello>
        <hello name="lisi3">hello Text3</hello>
        <world name="wangwu">world text1</world>
        <world name="wangwu2">world text2</world>
        <world >world text3</world>
    </students>
    复制代码

     

      Java代码:

    复制代码
    package com.example.xml.dom4j;
    
    import java.io.File;
    import java.util.Iterator;
    import java.util.List;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.DOMReader;
    import org.dom4j.io.SAXReader;
    
    /**
     * dom4j框架学习: 读取并解析xml
     * 
     * 
     */
    public class Dom4JTest2
    {
        public static void main(String[] args) throws Exception
        {
            SAXReader saxReader = new SAXReader();
    
            Document document = saxReader.read(new File("students.xml"));
    
            // 获取根元素
            Element root = document.getRootElement();
            System.out.println("Root: " + root.getName());
    
            // 获取所有子元素
            List<Element> childList = root.elements();
            System.out.println("total child count: " + childList.size());
    
            // 获取特定名称的子元素
            List<Element> childList2 = root.elements("hello");
            System.out.println("hello child: " + childList2.size());
    
            // 获取名字为指定名称的第一个子元素
            Element firstWorldElement = root.element("world");
            // 输出其属性
            System.out.println("first World Attr: "
                    + firstWorldElement.attribute(0).getName() + "="
                    + firstWorldElement.attributeValue("name"));
    
            System.out.println("迭代输出-----------------------");
            // 迭代输出
            for (Iterator iter = root.elementIterator(); iter.hasNext();)
            {
                Element e = (Element) iter.next();
                System.out.println(e.attributeValue("name"));
    
            }
    
            System.out.println("用DOMReader-----------------------");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            // 注意要用完整类名
            org.w3c.dom.Document document2 = db.parse(new File("students.xml "));
    
            DOMReader domReader = new DOMReader();
    
            // 将JAXP的Document转换为dom4j的Document
            Document document3 = domReader.read(document2);
    
            Element rootElement = document3.getRootElement();
    
            System.out.println("Root: " + rootElement.getName());
    
        }
    
    }
    复制代码

      代码运行后输出:

    复制代码
    Root: students
    total child count: 6
    hello child: 3
    first World Attr: name=wangwu
    迭代输出-----------------------
    lisi
    lisi2
    lisi3
    wangwu
    wangwu2
    null
    用DOMReader-----------------------
    Root: students
    复制代码

     

     

     

     

    参考资料

      圣思园张龙老师XML视频教程。

      源代码下载处:http://sourceforge.net/

      搜索dom4j:http://sourceforge.net/projects/dom4j/?source=directory

  • 相关阅读:
    ZOJ 2588 Burning Bridges
    POJ 1966 ZOJ 2182 Cable TV Network
    HDU 5348 MZL's endless loop
    HDU 5352 MZL's City
    Tarjan算法求解无向连通图的割点、割边、点双连通分量和边双连通分量的模板
    ZOJ 1119 SPF
    HDU 3452 Bonsai
    HDU 1520 Anniversary party
    POJ 2239 Selecting Courses
    POJ 1144 Network
  • 原文地址:https://www.cnblogs.com/smileallen/p/3391481.html
Copyright © 2020-2023  润新知