最新的Web开发教程
 

XPath语法


XPath使用路径表达式在XML文档中选择节点或节点集。 该节点通过以下的路径或步骤选择。


XML实例文档

我们将使用下面的XML文档在下面的例子。

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>

<book>
  <title lang="en">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="en">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

选择节点

XPath使用路径表达式在XML文档中选择节点。 该节点通过以下的路径或步骤选择。 最有用的路径表达式如下:

表达 描述
nodename 选择所有节点名称为“ nodename
/ 从根节点选择
// 从选择符合选择当前节点的文档中的节点,无论他们在哪里
. 选择当前节点
.. 选择当前节点的父节点
@ 选择属性

在下面的表格中我们列出了一些路径表达式以及表达式的结果:

路径表达式 结果
书店 选择所有节点名为"bookstore"
/书店 选择的根元素书店

Note:如果路径以斜线开始( / )它一定是到该元素的绝对路径!

书店/书 选择所有book元素是书店的儿童
//书 选择所有book元素,无论他们在哪里文档中
书店//书 选择所有book元素是后代的书店元素,也不管他们在哪里书店元素
// @郎 选择被命名为郎所有属性

谓词

谓词用于查找特定的节点或包含特定值的节点。

谓语被嵌入在中括号。

在下表中,我们列出了一些谓词的路径表达式以及表达式的结果:

路径表达式 结果
/书店/书[1] 选择第一个book元素是书店元素的孩子。

Note:在IE 5,6,7,8,9第一节点是[0],但根据W3C,它是[1]。 为了解决IE这个问题,设置SelectionLanguage与XPath:

In JavaScript: xmlsetProperty("SelectionLanguage","XPath") ;
/书店/书[ last() ] 选择最后一个book元素是书店元素的子
/书店/书[ last() -1] 选择倒数第二个book元素是书店元素的子
/书店/书[ position() <3] 选择前两个book元素是书店元素的子
//标题[@lang] 选择具有名为郎属性的所有title元素
//标题[@郎= 'EN'] 选择具有与值的“lang”属性的所有title元素"en"
/bookstore/book[price>35.00] 选择具有价格元素与值bookstore元素的所有book元素大于35.00
/bookstore/book[price>35.00]/title 选择具有价格元素与值bookstore元素的book元素的所有title元素大于35.00

选择未知节点

XPath的通配符可以用来选择未知的XML节点。

通配符 描述
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点

在下面的表格中我们列出了一些路径表达式以及表达式的结果:

路径表达式 结果
/书店/* 选择所有bookstore元素的子元素节点
// * 选择文档中的所有元素
//标题[@*] 选择其中有什么样的至少一个属性的所有title元素

选取多个路径

通过使用| 在XPath表达式可以选择多个路径。

在下面的表格中我们列出了一些路径表达式以及表达式的结果:

路径表达式 结果
//书/标题| //书/价格 选择所有book元素的所有title和price元素
//标题| //价钱 选择文档中的所有title和price元素
/书店/书/标题| //价钱 选择bookstore元素的book元素和文档中的所有title元素的所有要素价格