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::*