xpath 教程学习笔记
一、常用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>
</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()
转载请注明出处


浙公网安备 33010602011771号