• 8.xpath(dom4j支持的jar)


    1.使用dom4j支持xpath的操作(xpath可以直接获取到某个元素)

      (1)第一种形式

        /AAA/DDD/BBB:表示一层一层的,AAA下面DDD下面的BBB元素

      (2)第二种形式

        //BBB:表示获取所有元素名字是BBB的元素

      (3)第三种形式

        /*:获取所有的元素

      (4)第四种形式

        BBB[1]:表示获取第一个BBB元素

        BBB[last()]:表示获取最后一个BBB元素

      (5)第五种形式

        //BBB[@id]:表示获取所有名字是BBB并且元素上面有id属性的元素

      (6)第六种形式

        //BBB[@id='b1']:表示获取所有名字是BBB且元素上面有id属性的值b1

    2.使用dom4j支持xpath具体操作

      (1)默认情况下,dom4j是不支持xpath的,如果我们要使用xpath,那么必须把包导入项目中

        包名:jaxen-1.1-beta-6.jar

        位置:我们解压后dom4j_jar包dom4j-1.6.1lib中

      (2)在dom4j里里面提供了两个方法,用来支持xpath

        selectNodes("xpath表达式") 获取多个元素,返回一个list<Node>集合

        selectSingNode("xpath表达式") 并获取单个元素,返回一个Element

    3.下面是一个简单的查询实例

      需求:获取修改第一个name元素中的文本为老王

      xml文件如下

    <?xml version="1.0" encoding="UTF-8"?>
    <persion>
        <one>
            <id>1001</id>
            <name>张三</name>
            <age>18</age>
        </one>
        <two>
            <id>1002</id>
            <name>李四</name>
            <age>20</age>
        </two>
    </persion>

      实现代码如下:

      

    package Day4;
    
    import java.io.FileOutputStream;
    import org.dom4j.Document;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class Demo1 {
        public static void main(String[] args) throws Exception {
            //获取解析器
            SAXReader saxReader = new SAXReader();
            //获取整个文档document
            Document document = saxReader.read("src/Day4/1.xml");
            //直接获取第一个name元素
            Node node = document.selectSingleNode("//name[1]");
            //修改name元素的值为老王
            node.setText("老王");
            //更新xml文件
            FileOutputStream writer = new  FileOutputStream("src/Day4/1.xml");
            OutputFormat format = OutputFormat.createPrettyPrint();
            XMLWriter xmlWriter = new XMLWriter(writer, format);
            xmlWriter.write(document);
            xmlWriter.close();
        }
    }

    4.简化上面的代码

      可以把获取解析器和document封装

      可以把更新代码封装

      可以xml的相对地址封装(这样便于修改xml地址文件,这样写我们就不需要在实现带码中直接修改)

    代码如下:

    package Day4;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class Demo2 {
        public static void main(String[] args) {
            //获取document
            Document document = GetDoument.getDocument(GetDoument.path);
            //直接获取第一个name元素
            Node node = document.selectSingleNode("//name[1]");
            //修改name元素的值为老王
            node.setText("老王");
            //更新xml文件
            NewXml.newXml(document, GetDoument.path);
        }
    }
    
    
    //可以把获取解析器和document封装
    class GetDoument{
        //封装xml文件的相对地址
        public static final String path = "src/Day4/1.xml";
        
        public static Document getDocument(String path) {
            try {
                //获取解析器
                SAXReader saxReader = new SAXReader();
                //获取整个文档document
                Document document = saxReader.read(path);
                return document;
            } catch (DocumentException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    //可以把更新代码封装
    class NewXml{
        
        public static void newXml(Document document,String path) {
            FileOutputStream writer;
            try {
                writer = new  FileOutputStream(path);
                OutputFormat format = OutputFormat.createPrettyPrint();
                XMLWriter xmlWriter = new XMLWriter(writer, format);
                xmlWriter.write(document);
                xmlWriter.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
    }
  • 相关阅读:
    PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决
    POJ 1094-Sorting It All Out(拓扑排序)
    Windows剪贴板操作简单小例
    我的高效编程的秘诀--开发环境的重要性(IOS)
    js操作cookie的一些注意项
    解决 libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.4-1.el6.x86_64案例
    my.cnf 详解
    keepalived的log
    keepalive配置mysql自动故障转移
    说说能量守恒定律
  • 原文地址:https://www.cnblogs.com/zjdbk/p/9199527.html
Copyright © 2020-2023  润新知