• 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

  • 相关阅读:
    Android源码服务专家(申明:来源于网络)
    Android超精准计步器开发-Dylan计步(申明:来源于网路)
    eclipse中一个项目引用另一个项目的方法(申明:来源于网络)
    javaweb(二十九)——EL表达式
    javaweb学习总结(二十八)——JSTL标签库之核心标签
    javaweb(二十六)——jsp简单标签标签库开发(二)
    javaweb(二十四)——jsp传统标签开发
    javaweb(二十三)——jsp自定义标签开发入门
    javaweb(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
    javaweb(二十一)——JavaWeb的两种开发模式
  • 原文地址:https://www.cnblogs.com/smileallen/p/3391481.html
Copyright © 2020-2023  润新知