XML中的XPath简单操作

在XML中查询数据或者查询有限定条件的数据时,使用XPath指令是最为方便的。

本文讲的是:通过简单的XPath指令输出相对应的XML当中的数据。

先下载jaxen包,我在阿里云库 https://maven.aliyun.com/mvn/search 里面下载的

另一个dom4j包 直接百度就能下载。

把这两个jar文件导入编程工具中,就可以调用其中类

首先编辑一个简单的XML文件 代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 人力资源管理系统-->
<hr >
    <employee no="3301">
        <name>张三</name>
        <age>65</age>
        <salary>5000</salary>
        <department>
            <dname>会计部</dname>
            <adress>XX大厦-B103</adress>
        </department>
    </employee>

    <employee no="3302">
        <name>李四</name>
        <age>30</age>
        <salary>5000</salary>
        <department>
            <dname>开发部</dname>
            <adress>XX大厦-B103</adress>
        </department>
    </employee>
    <employee no="3303">
        <name>李铁柱</name>
        <age>25</age>
        <salary>3500</salary>
        <department>
            <dname>人事部</dname>
            <adress>XX大厦-B150</adress>
        </department>
    </employee>
    <employee no="3304">
        <name>王大锤</name>
        <age>50</age>
        <salary>4800</salary>
        <department>
            <dname>开发岗</dname>
            <adress>XX大厦-B150</adress>
        </department>
    </employee>
    <employee no="3305">
        <name>孙六</name>
        <age>40</age>
        <salary>8000</salary>
        <department>
            <dname>人事部</dname>
            <adress>XX大厦-B150</adress>
        </department>
    </employee>
</hr>

里面有我设置的5组员工信息,其中有no编号属性、名称、年龄、薪水、部门以及地址。

然后创建一个JAVA类,代码如下:

package com.imooc.dom4j;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import java.util.List;

public class XPathTestor {
    public void xpath(String xpathExp){  //参数是XPath指令
        String file="E:\\java\\HTML\\src\\hr.xml";  //个人xml文件地址
        SAXReader reader = new SAXReader(); //SAXReader类可以通过多种方法读取XML数据,返回Document类型文件
        try {
            Document document=reader.read(file);  //读取xml数据,返回Document类型文件
            List<Node> nodes=document.selectNodes(xpathExp);  //selectNodes方法,选择匹配XPath表达式的节点列表,返回Node类型
            for(Node node:nodes){  //遍历
                Element emp=(Element)node;  //强制转换称Element类型  元素类型
                System.out.println(emp.attributeValue("no"));  //输出和指令相符的no属性
                System.out.println(emp.elementText("name"));  //输出和指令相符节点的姓名
                System.out.println(emp.elementText("age"));  //输出和指令相符节点的年龄
                System.out.println(emp.elementText("salary"));  //输出和指令相符节点的薪水
                System.out.println("===============");
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args){
        //查询时建议使用xpath表达式查询
        XPathTestor testor=new XPathTestor();
        testor.xpath("/hr/employee");
        testor.xpath("//employee");
//        两个不同之处在于,第一个是在hr根目录下的所有employee元素 二第二个是全部的employee类型元素
        testor.xpath("//employee[salary<4000]");  //中括号是谓语 输出薪水小于4000的员工
        testor.xpath("//employee[name='李四']");  //按照姓名
        testor.xpath("//employee[@no=3301]");  //按照属性
        testor.xpath("//employee[1]");   //按照编号  第一个
        testor.xpath("//employee[last()]"); //最后一个
        testor.xpath("//employee[position()<3]");  //前三个
        testor.xpath("//employee[3] |//employee[5]");  //选第三个和第五个
    }
}

上一篇:xml相关操作


下一篇:xml文件解析