zoukankan      html  css  js  c++  java
  • 一脚踩进java之xml05——解析之DOM4j

    一般功能:dom4j-1.6.1.jar

    扩展功能:jaxen-1.1-beta-6.jar

    books.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <书架> 
      <> 
        <书名>世界未解之谜</书名>  
        <作者>项羽</作者>  
        <售价>99.8元</售价>  
        <简介>这书真好看</简介> 
      </>  
      <> 
        <书名>葵花宝典</书名>  
        <>大黄</>  
        <作者>无语</作者>  
        <售价>998两</售价>  
        <简介>欲练此功...</简介>  
        <团购价>1999两</团购价> 
      </> 
    </书架>

    MyDom4jUtil.java

    package cn.itcast.utils;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    /**
     * 使用DOM4J操作XML
     * @author Administrator
     *
     */
    public class MyDom4jUtil {
        
        /**
         * 通过路径获取document对象
         * @param path
         * @return
         * @throws DocumentException
         */
        public static Document getDocument(String path) throws DocumentException{
            // 获取解析器
            SAXReader reader = new SAXReader();
            return reader.read(path);
        }
        
        /**
         * 回写
         * @param document
         * @param path
         * @throws IOException 
         * @throws UnsupportedEncodingException 
         */
        public static void writeXML(Document document,String path) throws IOException{
            // 设置格式
            OutputFormat format = OutputFormat.createPrettyPrint();
            // 创建回写的类
            XMLWriter writer = new XMLWriter(new FileOutputStream(path),format);
            //
            writer.write(document);
            // 关闭流
            writer.close();
        }
    
    }

    Dom4jTest.java

    package cn.itcast.dom4j;
    import java.io.FileOutputStream;
    import java.util.List;
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    import cn.itcast.utils.MyDom4jUtil;
    
    /**
     * DOM4J的练习
     * @author Administrator
     *
     */
    public class Dom4jTest {
        
        public static void main(String[] args) {
            try {
                run5();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        /**
         * 对XPATH测试
         * @throws Exception
         */
        public static void run5() throws Exception{
            String path = "src/book2.xml";
            // 解析
            Document document = MyDom4jUtil.getDocument(path);
            // 原来获取根节点
            // 如果使用XPATH不用获取根节点
            // * List selectNodes(String xpathExpression)  
            // * Node selectSingleNode(String xpathExpression) 
            
            // List<Node> authors = document.selectNodes("/书架/书/作者");
            // 无论层级关系
            /*List<Node> authors = document.selectNodes("//作者");
            for (Node author : authors) {
                System.out.println(author.getText());
            }*/
            
            // /AAA/BBB[1]
            Node author = document.selectSingleNode("/书架/书[last()]/作者");
            //author.setText("无语");
            //MyDom4jUtil.writeXML(document, path);
            //System.out.println(author.getText());
            
        }
        
        /**
         * 在指定位置添加子节点
         * 在第二本书下的作者的节点之前添加狗的节点
         * @throws Exception
         */
        public static void run4() throws Exception{
            String path = "src/book2.xml";
            // 解析
            Document document = MyDom4jUtil.getDocument(path);
            // 获取根节点
            Element root = document.getRootElement();
            // 先获取第二本书
            Element book2 = (Element) root.elements("书").get(1);
            // 获取第二本书下的所有子节点
            List<Element> list = book2.elements();
            // 创建元素
            Element dog = DocumentHelper.createElement("狗");
            // 设置狗节点的文本内容
            dog.setText("大黄");
            // 操作list集合
            list.add(1, dog);
            // 回写
            MyDom4jUtil.writeXML(document, path);
        }
        
        
        /**
         * 修改文本内容
         * @throws Exception
         */
        public static void run3() throws Exception{
            String path = "src/book2.xml";
            // 解析
            Document document = MyDom4jUtil.getDocument(path);
            // 先获取根节点
            Element root = document.getRootElement();
            // 获取第二本书
            Element book2 = (Element) root.elements("书").get(1);
            // 获取团购价
            book2.element("团购价").setText("1999两");
            // 回写
            MyDom4jUtil.writeXML(document, path);
        }
        
        /**
         * 添加子节点
         * 在第二本书添加子节点
         * @throws Exception
         */
        public static void run2() throws Exception{
            // 获取解析器对象
            SAXReader reader = new SAXReader();
            // 解析XML文档,返回Document对象
            Document document = reader.read("src/book2.xml");
            // 获取根节点(书架的节点)
            Element root = document.getRootElement();
            // 获取第二本书
            Element book2 = (Element) root.elements("书").get(1);
            // 添加子节点    addElement()
            Element tgj = book2.addElement("团购价");
            // 设置文本的内容
            tgj.setText("9两");
            
            // 设置好看的格式
            OutputFormat format = OutputFormat.createPrettyPrint();
            // 设置紧凑的格式
            // OutputFormat format = OutputFormat.createCompactFormat();
            // 设置XML文件的编码
            format.setEncoding("UTF-8");
            // 回写(XMLWriter类) 设置格式    设置编码
            XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"),format);
            // 把document写到ml文件中
            writer.write(document);
            // 关闭流
            writer.close();
        }
        
        /**
         * 获取作者标签的文本内容
         * @throws Exception 
         */
        public static void run1() throws Exception{
            // 获取解析器对象SAXReader(DOM4J的SAX的解析器)
            SAXReader reader = new SAXReader();
            // 解析XML的文档
            Document document = reader.read("src/book2.xml");
            // 记住1:如果想完成解析,必须先获取根节点
            Element root = document.getRootElement();
            // 记住2:DOM4J的解析必须是一层一层的解析
            // 获取书架下面的书的节点
            List<Element> books = root.elements("书");
            // 循环遍历 
            for (Element book : books) {
                // 循环一次,获取作者的标签
                Element author = book.element("作者");
                // 获取文本内容
                System.out.println(author.getText());
            }
        }
    
    }
  • 相关阅读:
    2020年软件测试需要学什么技术?软件测试人员需要懂代码?软件测试工程师要经常加班吗?
    那些价值数亿的史上最强的【Bug之母】你都知道吗?
    接口自动化测试之-requests模块详解
    linux更新源管理
    Vscode的使用小技巧
    半吊子菜鸟学Web开发 -- PHP学习5-数据库
    半吊子菜鸟学Web开发 -- PHP学习 1-基础语法
    半吊子菜鸟学Web开发 -- PHP学习 4 --异常
    半吊子菜鸟学Web开发 -- PHP学习3-文件
    半吊子菜鸟学Web开发 -- PHP学习2-正则,cookie和session
  • 原文地址:https://www.cnblogs.com/smilehq/p/12611855.html
Copyright © 2011-2022 走看看