XPath 使用路径表达式在模型抽象树中选取节点,路径表达式分为两类,绝对路径表达式,相对路径表达式:
绝对路径表达式,是指从根节点开始选取的表达式,下表列出两类绝对路径表达式:
表达式 |
描述 |
/ |
基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个节点的绝对路径 |
// |
如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系) |
示例(以图 7模型为依据,下同):
路径表达式 |
结果 |
/root |
选取根节点,只返回一个节点 |
/root/products/Row |
选取root节点下的products节点下的所有Row节点,得到3个Row节点 |
//Row |
选取所有 Row节点,而不管它们在树中的的位置。得到14个节点 |
相对路径表达式:指的是以当前节点开始选取的表达式,(本章开始部分已经说明何为当前节点),下表列出相对路径表达式:
表达式 |
结果 |
节点名 |
当前节点下所有名称匹配子节点 |
. |
选取当前节点 |
.. |
选取当前节点的父节点 |
示例
路径表达式 |
假设当前节点$ |
结果 |
Row |
/root/products |
取得当前节点下的所有Row节点,返回三个Row节点 |
../customers/Row |
/root/products |
选取父节点的customers子节点下的Row节点,返回11个Row节点 |
./Row |
/root/products |
取得当前节点下的所有Row节点,返回三个Row节点,同一 |
节点过滤
我们在路径表达式中,可以加入过滤条件用来查找某个特定的节点或节点集。过滤条件被嵌在方括号中。在下面的表格中,我们列出了带有过滤条件的一些路径表达式,以及表达式的结果:
路经表达式 |
结果 |
/root/products/Row[1] |
选取属于products下的第一个Row节点 |
/root/customers/Row[last()] |
选取属于 customers下的最后一个 Row节点 |
/root/customers/Row[last()-1] |
选取属于 customers下的倒数第二个 Row节点 |
/root/customers/Row[position()<3] |
选取最前面的两个属于 customers的Row节点 |
选取未知节点
XPath 通配符可用来选取未知的节点。
实例
路径表达式 |
结果 |
/root/* |
选取 root下的所有子节点,得到products和customers两个子节点 |
//* |
选取文档中的所有子节点,得到root, products, customers和14个Row节点,总共17个节点 |
|