XPath轴
轴定义了当前节点和所选节点的树关系,
绝对路径,以正斜杠开始(/),例如/step1/step2/……
相对路径,不以正斜杠开始(/),例如step/step2/……
步(step)的语法:轴(axis)::节点测试(node-test)[谓语]
谓语是零个或者多个。
轴名称 | 含义 |
child | 选取当前节点的所有子元素 |
parent | 选取当前节点的父节点 |
ancestor | 选取当前节点的所有先辈 |
ancestor-or-self | 选取当前节点的所有先辈 |
descendant | 选取当前节点的所有后代元素 |
descendant-or-self | 选取当前节点的所有后代元素以及当前节点本身 |
preceding | 选取文档中当前节点的开始标记之前的所有节点 |
following | 选取文档中当前节点的结束标记之后的所有节点 |
preceding-sibling | 选取当前节点之前的所有同级节点 |
following-silbing | 选取当前节点之后的所有同级节点 |
self | 选取当前节点 |
attribute | 选取当前节点的所有属性 |
namespace | 选取当前节点的所有命名空间节点 |
例子:
<?xml version="1.0"encoding="IS0-8859-1"?>
<classroom>
<student>
<id>1001</id>
<name lang="en">marry</name>
<age>20</age>
<country>China</country>
</student>
<student>
<id>1002</id>
<name lang="en">jack</name>
<age>25</age>
<country>USA</country>
</student>
<teacher>
<classid>1</classid>
<name lang="en">tom</name>
<age>50</age>
<country>USA</country>
</teacher>
</classroom>
选取当前classroom节点中子元素的teacher节点 | /classroom/child::teacher |
选取所有id节点的父节点 | //id/parent::* |
选取所有以classid为子节点的祖先节点 | //classid/ancestor::* |
选取classroom节点下的所有后代节点 | /classroom/descendant::* |
选取所有以student为父节点的id元素 | //student/descendant::id |
选取所有classid元素的祖先节点及本身 | //classid/ancestor-or-self::* |
选取/classroom/student本身及所有后代元素 | /classroom/student/descendant-or-self::* |
选取/classroomteacher之前的所有同级节点,结果就是选择了所有的 student节点 | /classroom/teacher/preceding-sibling::* |
选取/classroom中第二个student 之后的所有同级节点结果就是选择了teacher节点 | /classroom/student[2]/following-sibling::* |
选取/classroom/teacher/节点所有之前的节点(除其祖先外),不仅仅是student节点,还有里面的子节点 | /classroom/teacher/preceding::* |
选取/classroom中第二个student 之后的所有节点,结果就是选择了teacher节点及其子节点 | classroom/student[2]/following::* |
选取 student节点,单独使用没有什么意思。主要是跟其他轴一起使用,如 ancestor-or-self,descendant-or-self | //student/self::* |
选取/classroom/teacher/name节点下的所有属性 | /classroom/teacher/name/attribute::* |
|
|