问题引入:把工资大于3000的员工提取出来;或者,编号为3310的员工信息提出来;难道要编写程序挨个遍历,然后提取?显然不可取,工作量太大;
XML有专门的查询工具:XPath;
目录
(2)XPath谓语表达式:在基本表达式的基础上,增加了额外的约束条件
2.在使用Dom4j,利用XPath查询时候,必须要先下载Jaxen的jar包;
3.在上面基本程序架构中,使用不同的XPath表达式,查询演示
(1)查询所有根节点(<hr>元素)下所有直接的子<employee>元素:"/hr/employee"
(2)查询XML中所有的<employee>元素,而不在意其位置:"//employee"
(3)获取所有“<salary>元素值大于等于4000”的<employee>元素:"//employee[salary>=4000]"
(4)查询,包含<name>子元素,且<name>元素值为“李四”的,<employee>元素:"//employee[name='李四']"
(5)查询,属性等于某值的所有<employee>属性:"//employee[@no=3304]"
(7)获得最后一个员工的信息:"//employee[last()]"
(8)获取前三个员工:"//employee[position()<4]"
(9)提取第二个和第四个员工和第五个员工:"//employee[2] | //employee[4] | //employee[5]"
一:XPath简介
XPath:是XML的查询语言,可以极大简化XML的查询和提取的过程;
1.XPath两种最常见的表达式:基本表达式;谓语表达式;
(1)XPath基本表达式
(2)XPath谓语表达式:在基本表达式的基础上,增加了额外的约束条件
2.在使用Dom4j,利用XPath查询时候,必须要先下载Jaxen的jar包;
发现,无法访问http://jaxen.codehaus.org/
解决办法:可以访问https://maven.aliyun.com/mvn/search;通过阿里提供的代码仓库找到需要的jar包:
二:XPath示例程序
1.准备的XML:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 人力资源管理系统 --><!--xmlns:xsi的意思是告诉XML文档,我们的约束是使用Schema;xsi:noNamespaceSchemaLocation:指向xsd文件 -->
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="hr-schema.xsd">
<employee no="3301"> <!-- 标签和属性尽量起的有意义,做到见名知意 -->
<name>李刚</name>
<age>31</age>
<salary>4000</salary>
<department> <!-- 标签可以嵌套 -->
<dName>会计</dName>
<dAddress>4楼103室</dAddress>
</department>
</employee>
<employee no="3302">
<name>李四</name>
<age>29</age>
<salary>5000</salary>
<department>
<dName>工程部门</dName>
<dAddress>4楼105室</dAddress>
</department>
</employee>
<employee no="3303">
<name>王红</name>
<age>35</age>
<salary>3800</salary>
<department>
<dName>行政部门</dName>
<dAddress>3楼301室</dAddress>
</department>
</employee>
<employee no="3304">
<name>王华</name>
<age>28</age>
<salary>4300</salary>
<department>
<dName>行政部门</dName>
<dAddress>3楼301室</dAddress>
</department>
</employee>
<employee no="3305">
<name>刘铁</name>
<age>27</age>
<salary>3300</salary>
<department>
<dName>行政部门</dName>
<dAddress>3楼301室</dAddress>
</department>
</employee>
</hr>