zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    leetcode231 2的幂 leetcode342 4的幂 leetcode326 3的幂
    leetcode300. Longest Increasing Subsequence 最长递增子序列 、674. Longest Continuous Increasing Subsequence
    leetcode64. Minimum Path Sum
    leetcode 20 括号匹配
    算法题待做
    leetcode 121. Best Time to Buy and Sell Stock 、122.Best Time to Buy and Sell Stock II 、309. Best Time to Buy and Sell Stock with Cooldown 、714. Best Time to Buy and Sell Stock with Transaction Fee
    rand7生成rand10,rand1生成rand6,rand2生成rand5(包含了rand2生成rand3)
    依图
    leetcode 1.Two Sum 、167. Two Sum II
    从分类,排序,top-k多个方面对推荐算法稳定性的评价
  • 原文地址:https://www.cnblogs.com/smileallen/p/3391481.html
Copyright © 2011-2022 走看看