在XPath中经常使用的概念:
1:基本值(原子值,Atomic value):用于表示简单的数据值;
2:项(Iterm):一个项代表一个节点或一个基本值,XPath2.0引入;
3:节点集:多个节点;
4:序列:Item和节点集就是序列,XPath2.0引入。
XPath支持的节点类型
-
root nodes
-
element nodes
-
text nodes
-
attribute nodes
-
namespace nodes
-
processing instruction nodes
-
comment nodes
指定数据类型方法:
使用datatype(data)格式。
e.g.
double(data)
Location Steps
location step由三个部分组成:
1:一个轴:指定所选节点和当前节点之间的关系;
2:一个节点测试:指定选取节点的节点类型;
3:N个限定谓语:使用任意的表达式进一步提炼所选节点集。
格式
Step:
AxisSpecifiter NodeTest Predicate* | AbbreviatedStep
AxisSpecifier:
AxisName::| AbbrevlatedAxisSpecifier
轴
XPath所支持的轴:
ancestor
ancestor-or-self
attribute
child
descendant
descendant-self
following
following-sibling
namespace
parent
preceding
preceding-sibling
self
节点测试
XPath支持的节点测试:
1:NameTest:直接具体名称;
2:node():选择轴里的所有节点;
3:text():选择文本节点;
4:comment():选择注释节点;
5:processing-instruction:选择处理指令节点;
6:*:通配符。
简化写法
1:省略child轴:因为child为默认轴,所以当轴是child时,可以省略轴;
2:@代表属性轴;
3://代表后代节点:其实就是/descendant-or-self::node()/的简写;
4:.代表当前节点:self::node()的简写;
5:..代表父节点:parent::node()的简写。
运算符
算数运算符:+、-、*、div、mod。
算数运算时,所有操作都会自动转换为数值。
注意:
1:XPath所有数值都是double类型。
2:对于字符串数值,XPath会截取前后的空白,并转换为数值,如果字符串不是数组,将转换成NaN;
3:ture转换成1,false转换成0;
4:对于节点集,其会先转换成字符串;
5:在表达式中计算两个元素之差时,应在减号前后增加空格。
比较运算符:=、!=、<、<=、>、>=。
逻辑运算符:and、or。
|:用于组合多个路径。
表达式
XPath2.0提供了几个表达式:
for表达式
作用:循环访问序列中的每一项。
格式:
ForExpr:
SimpleForClause return ExprSingle
SimpleForClause:
for $VarName in ExprSingle (, &VarName in ExprSingle)*
if表达式
格式:
if (condition1)
then rtVal1
[else if (condition2)
then rtVal2
...]
else
otherVal
示例:
if ($widget1/unit-cost < $widget2/unit-cost) then $widget1 else $widget2
if ($part/@discounted) then $part/wholesale else $part/retail
some/every表达式
作用:判断序列中的全部项或者任一项是否满足某个条件。
格式:
some | every &VarName in ExprSingle (, $varName in ExprSingle)* satisfies ExprSingle
示例:
some $x in (1, 2, "cat") satisfies $x * 2 = 4