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()
转载请注明出处