XML

XML 知识量:7 - 28 - 99

5.7 XPath与XML><

XPath节点- 5.7.1 -

使用XSL显示XML时,是通过XPath表达式来设置select或match属性值的。XPath是一种专门用于在XML文档中查找信息的语言。

在XPath中,有以下几类节点:

  • 元素

  • 属性

  • 文本

  • 命名空间

  • 处理指令

  • 注释

  • 文档(根)节点。

其中,XML文档作为节点树来对待,树的根被称为文档节点或根节点。

在XPath中,节点间存在以下几种关系:

  • 父:每个元素及属性都有一个父节点。

  • 子:元素可以有0到多个子节点。

  • 同胞:拥有相同父节点的节点称为同胞。

  • 祖先:某节点的父元素以及其父元素的父元素,依次类推,这些节点统称为该元素的祖先。

  • 后代:某节点的子元素以及其子元素的子元素,依次类推,这些节点统称为该元素的后代。

XPath语法- 5.7.2 -

XPath通过路径表达式来选取XML文档中的节点或节点集。

1、路径表达式。常用的路径表达式如下:

表达式说明
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配的当前节点开始选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

下面是一些例子:

  • school:选取school元素的所有子节点。

  • /school:从根元素开始选取school元素(school的绝对路径)。

  • school/student:选取所有属于school的子元素的student元素。

  • //student:选取所有student元素,不管它们的位置位于什么地方。

  • school//student:选取所有属于school元素的后代元素中的student元素,不管它们位于school之下的什么位置。

  • //@name:选取所有名为name的属性。

2、谓语。用于查找某个特定的节点或包含某个指定值的节点。常用的带谓语的表达式如下:

表达式示例说明
/school/student[1]选取school的第一个student子元素。
/school/student[last()]选取school的最后一个student子元素。
/school/student[last()-1]选取school的倒数第二个student子元素。
/school/student[position()<4]

选取school的前3个student子元素。

//name[@id]选取所有带有id属性的name元素。
//name[@id=1001]选取所有带有id属性,且属性值为1001的name元素。
/school/student[age>18]选取school的student子元素,且其age元素大于18。
/school/student[age>18]/name选取school的student元素的name元素,且其中的age元素大于18。

3、选取未知节点。可以通过通配符选取未知的XML元素。常用的通配符有:

  • *:表示匹配任何元素节点。

  • @*:表示匹配任何属性节点。

  • node():表示匹配任何类型的节点。

XPath运算符- 5.7.3 -

XPath路径表达式的返回值包括节点集、字符串、布尔值和数字4种类型,通过运算符可以计算出结果并加以返回。常用的运算符如下:

运算符说明示例返回值
|计算两个节点集//teacher | //student返回所有带有teacher和student元素的节点集
+加法1+23
-减法2-11
*乘法1*22
div除法2 div 12
=等于age=5若age是5,则返回true,否则返回false
!=不等于age!=5若age不是5,则返回true,否则返回false
<小于age<5若age小于5,则返回true,否则返回false
<=小于或等于age<=5若age小于或等于5,则返回true,否则返回false
>大于age>5若age大于5,则返回true,否则返回false
>=大于或等于age>=5若age大于或等于5,则返回true,否则返回false
orage=5 or age =6若age等于5或6中任意一个时,返回true,否则返回false
andage>5 and age <8若age大于5且小于8时,返回true,否则返回false
mod取余数7 mod 21