0
点赞
收藏
分享

微信扫一扫

黑马JAVA P198 XML文件的数据检索技术:XPath

笑望叔叔 2022-02-08 阅读 54

 

 

 

 

 

 

 

 

 

 

package com.itheima.d2_xpath;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;

public class XPathDemo {
    /**
     * 1.绝对路径:/根元素/子元素/子元素。
     */
    @Test
    public void parse01()throws Exception{
        //a.创建解析器对象
        SAXReader saxReader = new SAXReader();
        //b.把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/com\\itheima\\d1_dom4j\\Contacts2.xml"));
        //c.检索全部的名称
        List<Node> nameNodes = document.selectNodes("/contactList/contact/name");
        for (Node nameNode : nameNodes) {
            Element nameEle = (Element) nameNode;
            System.out.println(nameEle.getTextTrim());
        }
    }

    /**
     * 2.相对路径:   ./子元素/子元素   (.代表了当前元素)
     */
    @Test
    public void parse02()throws Exception{
        //a.创建解析器对象
        SAXReader saxReader = new SAXReader();
        //b.把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/com\\itheima\\d1_dom4j\\Contacts2.xml"));
        Element root = document.getRootElement();
        //c.检索全部的名称
        List<Node> nameNodes = root.selectNodes("./contact/name");
        for (Node nameNode : nameNodes) {
            Element nameEle = (Element) nameNode;
            System.out.println(nameEle.getTextTrim());
        }
    }

    /**
     * 3.全文检索:
     * //元素  在全文找这个元素
     * //元素1/元素2   在全文找元素1下面的一级元素2
     * //元素1//元素2   在全文找元素1下面的全部元素2
     */
    @Test
    public void parse03()throws Exception {
        //a.创建解析器对象
        SAXReader saxReader = new SAXReader();
        //b.把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/com\\itheima\\d1_dom4j\\Contacts2.xml"));
        //c.检索数据
//        List<Node> nameNodes = document.selectNodes("//name");
//        List<Node> nameNodes = document.selectNodes("//contact/name");
        List<Node> nameNodes = document.selectNodes("//contact//name");

        for (Node nameNode : nameNodes) {
            Element nameEle = (Element) nameNode;
            System.out.println(nameEle.getTextTrim());
        }
    }

//    /**
//     * 4.属性查找。
//     * //@属性名称   在全文检索属性对象。
//     * //元素[@属性名称]  在全文检索包含该属性的元素对象。
//     * //元素[@属性名称=值]  在全文检索包含该属性且属性值为该值的元素对象。
//     */

    @Test
    public void parse04() throws Exception{
        //a.创建解析器对象
        SAXReader saxReader = new SAXReader();
        //b.把XML加载成Document文档对象
        Document document =
                saxReader.read(XPathDemo.class.getResourceAsStream("/com\\itheima\\d1_dom4j\\Contacts2.xml"));
        //c.检索数据
        List<Node>  nodes = document.selectNodes("//@id");
        for (Node node : nodes) {
            Attribute attr = (Attribute) node;
            System.out.println(attr.getName() + "===>" + attr.getValue());
        }

        //查询name元素  (包含id属性的)
//        Node node  = document.selectSingleNode("//name[@id]");
        Node node  = document.selectSingleNode("//name[@id=888]");
        Element ele = (Element) node;
        System.out.println(ele.getTextTrim());

    }
}
<?xml version="1.0" encoding="UTF-8"?>
<contactList>
    <contact id="1" vip="true">
        <name>   潘金莲  </name>
        <gender>女</gender>
        <email>panpan@itcast.cn</email>
    </contact>
    <contact id="2" vip="false">
        <name>武松</name>
        <gender>男</gender>
        <email>wusong@itcast.cn</email>
    </contact>
    <contact id="3" vip="false">
        <name>武大狼</name>
        <gender>男</gender>
        <email>wuda@itcast.cn</email>
    </contact>
    <user>
        <contact>
            <info>

                <name id="888">我是西门庆</name>
            </info>
         </contact>
    </user>
</contactList>

 

举报

相关推荐

0 条评论