Java特殊文件xml —(利用Xpath技术进行xml检索,完成详解,附有代码+案例)

30.3 xml检索—Xpath

需要导入jar包(dom4j和jaxen.jar),Xpath技术依赖Dom4j技术

Xpath使用路径表达式来定位xml文档中的元素节点或属性节点

方法名字说明
Node.selectSingleNode(“路径表达式”)获取符合表达式的唯一元素
List selectNodes(“路径表达式”)获取符合表达式的元素集合

30.3.1Xpath绝对路径

采用绝对路径获取从根节点开始逐层的查找/contactList/contact/name节点列表并打印信息。

方法名说明
/根元素/子元素/孙元素从根元素开始,一级一级向下查找,不能跨级
public class Test01 {
    public static void main(String[] args) throws DocumentException {

        // 创建解析器对象
        SAXReader sr = new SAXReader();
        // 利用解析器读取本地xml文件(30.1中的xml)
        Document document = sr.read(new File("code_java02\filedemo\person.xml"));

        //检索单个:document.selectSingleNode("路径");
        //检索多个:document.selectNodes("路径");

        //检索多个:document.selectNodes("路径");
        List<Node> nodeList = document.selectNodes("/persons/person/name");
        for (Node node : nodeList) {
            // node:表示每一个username标签
            String name = node.getName();
            System.out.println(name);//name name
        }

        //检索单个:document.selectNodes("路径");
        // Node node = document.selectSingleNode("/persons/person/name");
        Element node = (Element) document.selectSingleNode("/persons/person/name");
        String text = node.getText();
        System.out.println(text);//zhangsan


    }
}

30.3.2 Xpath相对路径

  • 先得到根节点contactList
  • 再采用相对路径获取下一级contact节点的name子节点并打印信息
方法名说明
./子元素/孙元素从当前元素开始,一级一级向下查找,不能跨级
public class Test02 {
    public static void main(String[] args) throws DocumentException {

        // 创建解析器对象
        SAXReader sr = new SAXReader();
        // 利用解析器读取本地xml文件(30.1中的xml文件)
        Document document = sr.read(new File("code_java02\filedemo\person.xml"));

        //检索单个:document.selectSingleNode("路径");
        //检索多个:document.selectNodes("路径");

        // 参照物:自己本身,也就是根元素
        Element rootElement = document.getRootElement();
        // 利用相对路径,检索单个
        // Node node = rootElement.selectSingleNode("./person/name");
        Element node = (Element) rootElement.selectSingleNode("./person/name");
        String name = node.getName();
        String text = node.getText();
        System.out.println(name+","+text);
        //name,zhangsan

        // 利用相对路径,检索多个
        List<Node> nodes = rootElement.selectNodes("./user/username");
        for (Node node1 : nodes) {
            System.out.println(node1.getName());
            //name name
        }

    }
}

30.3.3 Xpath全文检索

在这里插入图片描述

public class Test01 {
    public static void main(String[] args) throws DocumentException {


        // 创建解析器对象
        SAXReader sr = new SAXReader();
        // 利用解析器读取本地xml文件(30.1中xml)
        Document document = sr.read(new File("code_java02\\filedemo\\person.xml"));

        //检索单个:document.selectSingleNode("路径");
        //检索多个:document.selectNodes("路径");

        //检索多个:document.selectNodes("路径");
        List<Node> nodesList1 = document.selectNodes("//name");
        System.out.println(nodesList1.size());//3
        for (Node node : nodesList1) {
            System.out.println(node.getText());
            //zhangsan lisi zhaoliu
        }

        List<Node> nodeList2 = document.selectNodes("//person/name");
        System.out.println(nodeList2.size());//2
        for (Node node : nodeList2) {
            System.out.println(node.getText());
            //zhangsan lisi 
        }
    }
}

30.3.4 Xpath属性检索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔚一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值