• 使用XPath对象解析xml文件


    使用XPath对象解析xml文件

    1.DocumentBuilderFactory类  工厂API,使应用程序能从XML文档获取生成DOM对象树的解析器

    其构造方法受保护,用newInstance()实例化

    2.创建解析器

    DocumentBuilder

    使用这个类,应用程序员可以从XML获得一个Document。

     这个类的实例可从DocumentBuilderFactory.newDocumentBuilder()方法获得。

    一旦获得此类实例,可以从各种输入源解析XML。这些输入源是InputStreams,Files,URL和SAX InputSources。

    ----其构造方法是受保护的

     1 public static void main(String[] args) throws Exception {
     2         // 创建解析工厂
     3         DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
     4         // 创建解析器
     5         DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
     6         // 通过解析器读取配置文件--返回Document对象树--org.w3c.dom.Document
     7         Document doc = documentBuilder.parse("config/bookstore.xml");
     8 
     9         // 创建XPath对象
    10         XPathFactory xPathFactory = XPathFactory.newInstance();
    11         XPath xPath = xPathFactory.newXPath();
    12         /*
    13          * 1.获取bookstore节点下的book属性category值为web下的第二个 title节点的文本内容
    14          * bookstore-》book[@category='web'][2]-》title
    15          * xpath路径:/bookstore/book[@category='web'][2]/title/text()
    16          */
    17         String titleXpath = "/bookstore/book[@category='web'][2]/title/text()";
    18         String titleVlue = (String) xPath.evaluate(titleXpath, doc, XPathConstants.STRING);
    19         System.out.println("1:" + titleVlue);
    20         /*
    21          * 2.获取bookstore节点下book属性category值为web的title属性为en的节点内容
    22          * xpath路径:/bookstore/book[@category='web']/title[@lang='en']/text() 选取属性为en
    23          * 的title[@lang='en']
    24          */
    25         String titleXpath2 = "/bookstore/book[@category='web']/title[@lang='en']/text()";
    26         String titleValue2 = (String) xPath.evaluate(titleXpath2, doc, XPathConstants.STRING);
    27         System.out.println("2:" + titleValue2);
    28         /*
    29          * 3.获取bookstore下book属性category值为cooking的title的lang属性的值
    30          * xpath路径:/bookstore/book[@category='cooking']/title/@lang
    31          */
    32         // 获取属性的值
    33         String str1 = "/bookstore/book[@category='cooking']/title/@lang";
    34         String shuxing = (String) xPath.evaluate(str1, doc, XPathConstants.STRING);
    35         System.out.println("3:" + shuxing);
    36         /*
    37          * 4.获取bookstore节点下的所有book的节点集合 /bookstore/book
    38          */
    39         // 返回值是节点集合
    40         String str3 = "/bookstore/book";
    41         NodeList all = (NodeList) xPath.evaluate(str3, doc, XPathConstants.NODESET);
    42         // 开始遍历集合
    43         for (int i = 0; i < all.getLength(); i++) {
    44             // book节点
    45             Element bookelt = (Element) all.item(i);// i是获取第几个
    46             String titleValue = (String) xPath.evaluate("title", bookelt, XPathConstants.STRING);
    47             String authorValue = (String) xPath.evaluate("author", bookelt, XPathConstants.STRING);
    48             String yearValue = (String) xPath.evaluate("year", bookelt, XPathConstants.STRING);
    49             String priceValue = (String) xPath.evaluate("price", bookelt, XPathConstants.STRING);
    50 
    51             System.out.println(
    52                     "title:" + titleValue + " author:" + authorValue + " year:" + yearValue + " price:" + priceValue);
    53 
    54         }
    55     }

    //config/bookstore.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 
    1.获取bookstore节点下的book属性category值为web下的第二个
    title节点的文本内容
    bookstore-》book[@category='web'][2]-》title
    xpath路径:/bookstore/book[@category='web'][2]/title/text()
     -->
     <!-- 
     2.获取bookstore节点下book属性category值为web的title属性为en的节点内容
     xpath路径:/bookstore/book[@category='web']/title[@lang='en']
     选取属性为en 的title[@lang='en']
      -->
     <!-- 
     3.获取bookstore下book属性category值为cooking的title的lang属性的值
     xpath路径:/bookstore/book[@category='cooking']/title/@lang
      -->
     <!-- 
     4.获取bookstore节点下的所有book的节点集合
     /bookstore/book
      -->
    <bookstore>
        <book category="children">
            <title lang="en">Harry Potter</title>
            <author>J K. Rowling</author>
            <year>2005</year>
            <price>29.99</price>
        </book>
        <book category="cooking">
            <title lang="en">Everyday Italian</title>
            <author>Giada De Laurentiis</author>
            <year>2005</year>
            <price>30.00</price>
        </book>
        <book category="web">
            <title lang="en">Learning XML</title>
            <author>XJS</author>
            <year>2019</year>
            <price>79.88</price>
        </book>
        <book category="web">
            <title lang="uk">Learning stack</title>
            <author>XJS</author>
            <year>2019</year>
            <price>100.00</price>
        </book>
    </bookstore>
  • 相关阅读:
    echarts 图表tooltip数据默认是按照series中的数据位置排序。 鼠标移入排序
    三位加,号
    保留整数的方法
    水印vue
    vue 省市区
    平行四边形css
    css 文字样式
    js练习题
    axios 之cancelToken原理以及使用 取消上一次请求
    身份证获取生日性别
  • 原文地址:https://www.cnblogs.com/xjs1874704478/p/10706610.html
Copyright © 2020-2023  润新知