路径选择:
表达式 | 描述 |
. | 当前节点 |
.. | 当前节点的父节点 |
/ | 直接子节点 |
// | 子孙节点 |
定位节点:
1. /class/student
2. /class/student/name
1.表示选择“class”节点下的所有“student”节点
2.表示选择“class”节点下的所有“student”节点的“name”节点
绝对路径和相对路径定位节点:
1. /class/student/name
2. class/student/name
1. 利用绝对路径选择进行节点定位
2.利用相对路径进行节点定位
多路径选择的定位节点:
/class/student/name|/class/student/size|/class/teacher/name
利用“|”操作符来选择多个路径。
表示选择“/class/student/name”路径和“/class/student/size”路径以及“/class/teacher/name”路径
选择未知元素:
利用“*”操作符来选择未知的XML元素
1. /class/student/*
2. /class/*/name
3. /*/*/name
4. //*
1. 选择“class”节点下所有的“student”节点的所有节点
2.选择“class”节点下的所有节点的“name”节点
3.用于选择具有两个祖先的所有“name”节点
4.//*用于选择该文档的所有元素。
选择分支:
有时匹配路径的选项不止一个,我们可以通过使用“[ ]”来进一步指定某一个元素,在中括号中可以使用各种函数,数值,表达式等来指定某个符合条件的元素。如下:
1. /class/student[1]
2. /class/student[age]
3. /class/student[age=20]
4. /class/student[age=20]/name
5. /class/student[last()]
1. 选择“class”节点下的第一个“student”子节点
2. 选择“class”节点下含有“age”节点的所有“student”节点
3.选择“class”节点下含有“age”且“age=20”的所有“student”节点
4. 选择“class”节点下含有“age=20”的所有“student”节点的所有“name”节点
5. 选择“class”节点下最后一个“student”子节点
选择属性:
在xpath中要获得属性信息必须以前缀“@”来指定,如下:
1. //@id
2. /class/student[@id]
3. /class/student[@*]
4. /class/student[@id='ADR02']
1. 选择所有属性名为“id”的属性
2. 选择“class”节点包含有“id”属性的所有“student”节点
3. 选择“class”节点下包含有属性的所有“student”节点
4. 选择“class”节点下属性“id”值为“ADR02”的所有“student”节点
节点类型:
类型 | 描述 |
comment() | 注释节点 |
node() | 任何类型的节点 |
processing-instruction() | 处理指令节点 |
text() | 文本类型节点 |
轴定位:
轴名称 | 描述 |
---|---|
ancestor | 选取当前节点的所有祖父节点 |
ancestor-or-self | 选取当前节点的所有祖父节点和当前节点本身 |
attribute | 选取当前节点的所有属性。 |
child | 选取当前节点的所有子节点 |
descendant | 选取当前节点的所有后代节点(子孙节点) |
descendant-or-self | 选取当前节点的所有后代节点和当前节点本身 |
following | 选取文档中当前节点的结束标签后的所有节点 |
following-sibling | 选取当前节点之后的所有兄弟(同级)节点 |
namespace | 选取当前节点的所有命名空间节点 |
parent | 选取当前节点的父节点 |
preceding | 选取文档中当前节点的开始标签之前的所有节点 |
preceding-sibling | 选取当前节点之前的所有兄弟(同级)节点 |
self | 选取当前节点 |
轴定位的语法:
轴名::节点测试[判定语句]
1. child::age[age=20]
2. child::text()
节点测试是一个条件,它要求凡是轴选中的所有节点必须满足此条件。
关系表达式:
运算符 | 作用 |
= | 判断两个数值是否相等 |
!= | 判断操作数1是否不等于操作数2 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
or | 或 |
and | 和 |
xpath函数库
节点集函数:
函数名 | 描述 |
count() | 返回被选元素的数量 |
id() | 通过元素的唯一ID选择元素 |
last() | 返回最后一个节点是第几节点 |
local-name() | 返回节点集中的第一个节点的local name |
name() | 返回元素的元素名 |
namespace-uri() | 返回节点集中的第一个节点的命名空间URI |
position() | 返回被选节点是第几节点 |
字符串函数:
类型 | 描述 |
concat() | 返回字符串连接的结果 |
contains() | 如果第一个字符串包含着第二个字符串则返回真,否则返回假 |
normalize-space() | 返回去除了前后空白以及重复空白的参数字符串 |
starts-with | 如果第一个字符串以第二个字符串开头为则返回真,否则返回假 |
string() | 将对象转换为字符串。 |
string-length() | 返回第一个字符串的长度 |
substring() | 返回第一个参数中从第二个参数的指定未知开始、第三个参数指定的长度的字符串 |
substring-after() | 返回字符串中从开始到某以字符串第一次出现的位置后的字符串 |
数值函数:
函数名 | 描述 |
ceiling() | 返回不小于参数的最小整数 |
floor() | 返回不大于参数的最大整数 |
number() | 将参数转换为数字 |
round() | 返回与参数最接近的整数值 |
sum() | 返回节点集中所有节点的总和。每一个节点在求和之前先转换成数值 |
布尔函数:
函数名 | 描述 |
boolean() | 将参数转换成布尔值。 如果参数为0或者NaN(不是数字),则转换为false 如果参数为非空的节点集,转换为true;空节点集转换为false 如果参数为非空的字符串,转换为true;空字符串转换成false 如果参数不属于四种基本类型的对象,通过该类型相应方式转换为布尔值。 |
false() | 返回false |
lang() | 如果该节点的xml:lang属性与参数字符串相同,则返回true。此函数不常用 |
not() | 如果参数为false则返回true,否则返回false |
true() | 返回true |