XPath 轴(Axes)学习笔记

在使用XPath进行文档解析时,轴是一个非常重要的概念,它可以让我们在文档中按照不同的方向移动并选取节点。XPath定义了13种不同的轴,每一种轴都有自己特定的功能,本文将介绍其中比较常用的几种轴。

child 轴

child 轴选取当前节点的所有子元素,语法如下:

Copy Code
/parent::node()/child::node()

例如,假设我们有如下的XML文档:

xmlCopy Code
<root> <book category="Children"> <title lang="en">An Introduction to XML</title> <author>Tan Ah Teck</author> <year>2000</year> <price>29.99</price> </book> <book category="Web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </root>

我们可以使用如下的XPath表达式选取所有的 book 元素的所有子元素:

xpathCopy Code
//book/child::*

该表达式会返回所有书籍的标题、作者、年份和价格。

parent 轴

parent 轴选取当前节点的父节点,语法如下:

Copy Code
/child::node()/parent::node()

例如,假设我们有如下的XML文档:

xmlCopy Code
<person> <name>John</name> <age>30</age> <address> <city>Beijing</city> <street>Haidian Street</street> </address> </person>

我们可以使用如下的XPath表达式选取 city 元素的父节点 address

xpathCopy Code
//city/parent::*

该表达式会返回 address 元素。

ancestor 轴

ancestor 轴选取当前节点的所有祖先节点,从最近的祖先节点开始,一直到根节点。语法如下:

Copy Code
/child::node()/ancestor::node()

例如,假设我们有如下的XML文档:

xmlCopy Code
<body> <div class="container"> <p class="intro">Hello World!</p> </div> </body>

我们可以使用如下的XPath表达式选取 p 元素的所有祖先元素:

xpathCopy Code
//p/ancestor::*

该表达式会返回 div 元素和 body 元素。

descendant 轴

descendant 轴选取当前节点的所有子孙节点(不包括自身),语法如下:

Copy Code
/parent::node()/descendant::node()

例如,假设我们有如下的XML文档:

xmlCopy Code
<root> <book category="Children"> <title lang="en">An Introduction to XML</title> <author>Tan Ah Teck</author> <year>2000</year> <price>29.99</price> </book> <book category="Web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </root>

我们可以使用如下的XPath表达式选取 root 元素的所有子孙元素:

xpathCopy Code
//root/descendant::*

该表达式会返回所有书籍的标题、作者、年份和价格。

attribute 轴

attribute 轴选取当前节点的所有属性,语法如下:

Copy Code
/parent::node()/attribute::node()

例如,假设我们有如下的XML文档:

xmlCopy Code
<person id="1"> <name>John</name> <age>30</age> <address> <city>Beijing</city> <street>Haidian Street</street> </address> </person>

我们可以使用如下的XPath表达式选取 person 元素的所有属性:

xpathCopy Code
//person/attribute::*

该表达式会返回 id 属性。

以上是XPath中比较常用的几种轴的介绍。在实际应用中,根据需要选择不同的轴能够让我们更加高效地进行文档解析和数据提取。