• XML:XML的解析


    1 xpath介绍

    XPath 是一门在 XML 文档中查找信息的语言。 可以是使用xpath查找xml中的内容

    XPath 的好处

      由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合 XPATH就可以直接获取到某个元素

      

      需要再导入 jaxen-1.1-beta-6.jar

      

    2 XPath基本语法介绍

    使用dom4j支持xpath的操作的几种主要形式

    语法 说明
    /AAA/DDD/BBB 表示一层一层的,AAA下面 DDD下面的BBB
    //BBB 表示和这个名称相同,表示只要名称是BBB,都得到
    //* 所有元素
    BBB[1] , BBB[last()] 第一种表示第一个BBB元素, 第二种表示最后一个BBB元素
    //BBB[@id] 表示只要BBB元素上面有id属性,都得到
    //BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1

      

     

     

    3 API介绍

    常用方法

      1.selectSingleNode(query): 查找和 XPath 查询匹配的一个节点

        参数是Xpath 查询串

      2.selectNodes(query): 得到的是xml根节点下的所有满足 xpath 的节点

        参数是Xpath 查询串

      3.Node: 节点对象

    4 Xpath读取XML

    数据准备 book.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <bookstore>
    <book id="book1">
    <name>Java从入门到跑路</name>
    <author>金圣叹</author>
    <price>99</price>
    </book>
    <book id="book2">
    <name>红楼梦</name>
    <author>曹雪芹</author>
    <price>69</price>
    </book>
    <book id="book3">
    <name>Java编程思想</name>
    <author>埃克尔</author>
    <price>59</price>
    </book>
    </bookstore>

    代码示例

      1. 使用selectSingleNode方法 查询指定节点中的内容

    /*
    * 1. 使用selectSingleNode方法 查询指定节点中的内容
    * */
    @Test
    public void test1() throws DocumentException {
    //1.创建解析器对象
    SAXReader sr = new SAXReader();
    //2.获取文档对象
    Document document =
    sr.read("H:\jdbc_work\xml_task03\src\com\lagou\xml03\book.xml");
    //3.调用 selectSingleNode() 方法,获取name节点对象
    Node node1 = document.selectSingleNode("/bookstore/book/name");
    System.out.println("节点: " + node1.getName());
    System.out.println("书名: " + node1.getText());
    //4.获取第二本书的名称
    Node node2 = document.selectSingleNode("/bookstore/book[2]/name");
    System.out.println("第二本书的书名为: " + node2.getText());
    }

      2.使用selectSingleNode方法 获取属性值,或者属性值对应的节点

    /*
    * 2.使用selectSingleNode方法 获取属性值,或者属性值对应的节点
    * */
    @Test
    public void test2() throws DocumentException {
    //1.创建解析器对象
    SAXReader sr = new SAXReader();
    //2.获取文档对象
    Document document =
    sr.read("H:\jdbc_work\xml_task03\src\com\lagou\xml03\book.xml");
    //3.获取第一个book节点的 id属性的值
    Node node1 = document.selectSingleNode("/bookstore/book/attribute::id");
    System.out.println("第一个book的id值为: " + node1.getText());
    //4.获取最后一个book节点的 id属性的值
    Node node2 =
    document.selectSingleNode("/bookstore/book[last()]/attribute::id");
    System.out.println("最后一个book节点的id值为: " + node2.getText());
    //5.获取id属性值为 book2的 书名
    Node node3 = document.selectSingleNode("/bookstore/book[@id='book2']");
    String name = node3.selectSingleNode("name").getText();
    System.out.println("id为book2的书名是: " + name);
    }

      3. 使用 selectNodes()方法 获取对应名称的所有节点

      

    /*
    * 3.使用 selectNodes()方法 获取对应名称的所有节点
    *
    * */
    @Test
    public void test3() throws DocumentException {
    //1.创建解析器对象
    SAXReader sr = new SAXReader();
    //2.获取文档对象
    Document document =
    sr.read("H:\jdbc_work\xml_task03\src\com\lagou\xml03\book.xml");
    //3.获取所有节点,打印节点名
    List<Node> list = document.selectNodes("//*");
    for (Node node : list) {
    System.out.println("节点名: " + node.getName());
    }
    //4.获取所有的书名
    List<Node> names = document.selectNodes("//name");
    for (Node name : names) {
    System.out.println(name.getText());
    }
    //5.获取指定 id值为book1的节点的所有 内容
    List<Node> book1 =
    document.selectNodes("/bookstore/book[@id='book1']//*");
    for (Node node : book1) {
    System.out.println(node.getName()+" = " + node.getText());
    }
    }
  • 相关阅读:
    shell--练习--简易计算器
    shell--运算符
    shell--传递参数
    PHP数学函数的练习
    PDO对数据库的操作
    PHP实现手机短信的验证
    ThinkPHP框架 _ 学习16
    ThinkPHP框架 _ 学习15
    ThinkPHP框架 _ 学习14
    ThinkPHP框架 _ 学习13
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15066606.html
Copyright © 2020-2023  润新知