一、常用Xpath表达式
表达式 | 结果 |
nodename | 选择所有目前节的子节 |
/ | 从根节点开始选 |
// | 不管从哪里都要匹配 |
. | 当前节 |
.. | 当前节的父节 |
@ | 选择属性 |
例子:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<department>
<name language="Chinese">Tech Department</name>
<leader>Zhang San</leader>
<quantity>20</quantity>
<target>software develop</target>
</department>
<department>
<name language="Chinese">Sale Department</name>
<leader>Li Si</leader>
<quantity>20</quantity>
<target>Sale work</target>
</department>
</company>
1. 选择所有公司节点的子节点
company
2. 选择根路径下的所有公司
/company
3. 选择公司下面的所有部门
company/department 或者 /company/department
4. 选择所有的部门节点
//department
5. 选择在公司节点下的所有部门节点(不管几级深度)
company//department
6 选择所有属性名为 language 的属性
//@language
注释:在XPath中,一共有6中节点(node):元素、属性、文字、命名空间、处理说明、注释和文档
二、谓词
用来指节点的特殊的值。放在[]里面.
1. 选择公司里面的第一个部门
company/department[1]
2. 选择公司里面的最后一个部门
/company/department[last()] 或者 company/department[last()]
3. 选择公司里面的倒数第二个部门
/company/department[last()-1]
4. 选择公司里面前2个部门
/company/department[position()<3]
5. 选择含有”语言”属性的名称节点
//name[@language]
5. 选择含有语言属性,并且属性值为Chinese的名称节点
//name[@language=’Chinese’]
6. 选择人数大于10的部门
/company/department[@quantity>10]
7. 选择公司里所有人数大于10的部门的名称
/company/department[@quantity>10]/name
三 通配符
通配符 | 含义 |
* | 匹配所有的元素节点 |
@* | 匹配所有的属性节点 |
node() | 匹配所有的任何类型的节点 |
1. 选择所有公司的子节点
/company/*
2. 选择文档中所有的元素
//*
3. 选择含有属性的name节点
//name[@*]
四 使用 | 选择多个路径
1.选择所有部门里面的人数和名称元素
//department/name | //department/quantity
3. 选择所有的名称和人数元素
//name | //quantity
4. 选择所有部门里面的”名称”元素和所有的 人数 元素
/company/department/name|//quantity
五. XPath轴
制定了上下文节点和要选择的节点关系. 最常见的:child, attribute, self, parent
轴 | 作用 |
child | 包含当前节点的儿子 |
attribute | 包含当前节点的所有属性 |
self | 只包含但前节点 |
parent | 包含当前节点的父节点 |
descendent | 包含当前节点的后代 和 后代不包含属性和命名空间的节点 |
ancestor | 包含当前节点的祖先,祖先总是包含根节点 |
following-sibling | 包含当前节点随后的所有节点树,但不包含attribute或者namespace的节点 |
preceding-sibling | 包含当前节点随后的所有节点树, 但不包含attribute或者namespace的节点 |
following | 包含当前节点随后的所有节点树,但不包含attribute或者namespace的节点或当前节点的后代 |
preceding | 包含当前节点随后的所有节点树, 但不包含attribute或者namespace的节点或当前节点的后代 |
namespace | 包含了当前节点的所有namespace节点 |
descendent-or-self | 包含了当前节点和当前节点的后代 |
ancestor-or-self | 包含了当前节点和当前节点的祖先 |
六 路径表达式定位
/company 为绝对路径
company 为相对路径
路径表达式 | 含义 |
child::department | 选择当前节点下所有为部门的子节点 |
attribute::language | 选择当前节点下所有属性为语言的节点 |
child::* | 选择当前节点下的所有子节点 |
attribute::* | 选择当前节点所有的属性 |
child::text() | 选择当前节点所有子节点的文字 |
child::node() | 选择当前节点所有子节点 |
descendant::department | 选择当前节点所有为部门的孙节点 |
ancestor::department | 选择所有当前节点所有为部门的祖先节点 |
ancestor-or-self | 当前节点和其祖先节点为部门的节点 |
child::*/child::quantity | 当前节点素有含人数的孙子节点 |
七.XPath运算符
运算符 | 名称 | 人数 | 作用 |
| | 取交集 | //部门一|//部门二 | 返回所有部门一和部门二节点 |
+ | 加 | 1+1 | 2 |
- | 减 | 1-1 | 0 |
* | 乘 | 1*1 | 1 |
div | 除 | 1 div 1 | 1 |
= | 等于 | 人数=1 | 如果人数等于1则返回true,否则返回false |
!= | 不等于 | 人数!=1 | 如果人数不等于1则返回true,否则false |
< | 小于 | 人数<1 | 如果人数小于1则返回true,否则false |
<= | 小于等于 | 人数<=1 | 如果人数小于等于1则返回true,否则false |
> | 大于 | 人数>1 | 如果人数大于1则返回true,否则false |
>= | 大于等于 | 人数>=1 | 如果人数大于等于1则返回true,否则false |
or | 或者 | 人数=1 or 人数=2 | 如果人数等于1或者等于2,则返回true,否则false |
and | 并且 | 人数>1 and 人数<5 | 如果人数大于1或者小于5,则返回true,否则false |
mod | 取余数 | 5 mod 2 | 1 |
综合实例:
1. 选出科技部的人数
/company/department[name='Tech Department']/quantity/text()