• XML文档读取DOM4j


    JAXP是sun公司官方提供的java解析工具包,但很多其他企业和机构也都开发了自己的xml解析工具,甚至比JAXP更加优秀,比如DOM4J。

    • Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
    • Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
    • 使用Dom4j开发,需下载dom4j相应的jar文件。
    • Dom4j的使用可参见其所提供的文档(quick start)

    DOM4J需要加入两个包:dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar

    参考下载地址:http://pan.baidu.com/s/1eS3X3DS

    完整代码:

    package package1112;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.IllegalAddException;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class third {
        private static void find() throws DocumentException
        {
            //解析xml文档
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("WebRoot/xml/t6.xml"));
            // 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查
              Element root = document.getRootElement(); 
              List<Element> list =root.elements();
              List<Element> list1 = list.get(1).elements();
              System.out.println(list1.get(1).getText());
             //输出特定节点特定属性的属性值
            Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0);
            System.out.println(e.attributeValue("title"));
        }
        /**创建子节点
         * @throws DocumentException
         * @throws IllegalAddException
         * @throws IOException
         */
        private static void addElement() throws DocumentException,IllegalAddException, IOException
        {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("WebRoot/xml/t6.xml"));
            // 使用工具类DocumentHelper创建结点
            Element e = DocumentHelper.createElement("languge");
            e.setText("Chinese");
            e.addAttribute("bb", "boy");
            // 寻找父节点
            Element ee = (Element) document.selectNodes("//book").get(1);
            // 添加结点至内存文档
            ee.add(e);
            // Writing a document to a file,可以参考dom4j的API
            XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
            writer.write(document);
            writer.close();
        }
    
        /**删除子节点
         * @throws DocumentException
         * @throws IOException
         */
        private static void deleteElement() throws DocumentException, IOException
        {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("WebRoot/xml/t6.xml"));
            // 读取待删除结点的父节点
            Element e = (Element) document.selectNodes("//languge").get(0);
            // 移除结点(内存)
            e.getParent().remove(e);
            // Writing a document to a file,可以参考dom4j的API
            XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
            writer.write(document);
            writer.close();
        }
        
        public static void main(String[] args) throws DocumentException
        {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("WebRoot/xml/t6.xml"));
        }
    }

    代码解析:

    总体:三个功能函数,一个主函数

    功能函数1:find()

    两种方式(传统方式,Xpath方式)输出特定节点的文本内容
    输出特定的属性值

    传统方式:

    private static void find() throws DocumentException
        {
            //解析xml文档
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("WebRoot/xml/t6.xml"));
            // Xpath解析模式
            Element e = (Element) document.selectNodes("//title").get(1);
            System.out.println(e.getText());
        }

    Xpath方式:

        private static void find() throws DocumentException
        {
            //解析xml文档
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("WebRoot/xml/t6.xml"));
            // 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查
              Element root = document.getRootElement(); 
              List<Element> list =root.elements();
              List<Element> list1 = list.get(1).elements();
              System.out.println(list1.get(1).getText());
             //输出特定节点特定属性的属性值
            Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0);
            System.out.println(e.attributeValue("title"));
        }

    功能函数二: addElement()

    创建新节点

        private static void addElement() throws DocumentException,IllegalAddException, 
        IOException
        {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("WebRoot/xml/t6.xml"));
            // 使用工具类DocumentHelper创建结点
            Element e = DocumentHelper.createElement("languge");
            e.setText("Chinese");
            e.addAttribute("bb", "boy");
            // 寻找父节点
            Element ee = (Element) document.selectNodes("//book").get(1);
            // 添加结点至内存文档
            ee.add(e);
            // Writing a document to a file,可以参考dom4j的API
            XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
            writer.write(document);
            writer.close();
        }

    功能函数三:deleteElement()

    删除节点

    private static void deleteElement() throws DocumentException, IOException
        {
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("WebRoot/xml/t6.xml"));
            // 读取待删除结点的父节点
            Element e = (Element) document.selectNodes("//languge").get(0);
            // 移除结点(内存)
            e.getParent().remove(e);
            // Writing a document to a file,可以参考dom4j的API
            XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
            writer.write(document);
            writer.close();
        }
  • 相关阅读:
    node.js ---path模块
    es6箭头函数this问题
    Codeforces Round #576 (Div. 2) | CF1199 补题
    Hungary
    CF 1196D2 RGB Substring (hard version) --- 前缀和 + 思维
    康托展开
    POJ1821 Fence --- 单调队列 + DP
    素数筛
    自动化接口面试遇到的问题
    linux遇到的面试问题
  • 原文地址:https://www.cnblogs.com/excellencesy/p/7832492.html
Copyright © 2020-2023  润新知