在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]"); //选第三个和第五个
}
}