浏览 6
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 | 选择名称为"bookstore"的所有节点 |
| /bookstore | 选择根元素 注释: 如果路径以斜杠(/)开头,它总是表示元素的绝对路径! |
| bookstore/book | 选择所有属于书店子目录的书籍元素 |
| //book | 选择所有书本元素,无论它们在文档中的何处 |
| bookstore//book | 选择作为bookstore元素的后代的所有book元素,无论它们在bookstore元素下的何处 |
| //@lang | 选择名为lang的所有属性 |
谓词
谓词用于查找包含特定值的特定节点或节点。
谓词总是嵌入在方括号中。
在下表中,我们列出了一些带有谓词的路径表达式以及表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| /bookstore/book[1] | 选择作为bookstore元素的子元素的第一个book元素。
注释: 在IE 5、6、7、8、9中,第一个节点是[0],但根据W3C,它是[1]。要在IE中解决此问题,请将SelectionLanguage设置为XPath: In JavaScript: xml.setProperty("SelectionLanguage","XPath"); |
| /bookstore/book[last()] | 选择书店元素的子元素的最后一个book元素 |
| /bookstore/book[last()-1] | 选择最后一个book元素,它是bookstore元素的子元素 |
| /bookstore/book[position()<3] | 选择作为bookstore元素的子元素的前两个book元素 |
| //title[@lang] | 选择所有具有名为lang属性的标题元素 |
| //title[@lang='en'] | 选择具有值为"en"的"lang"属性的所有标题元素 |
| /bookstore/book[price>35.00] | 选择书店元素中具有值大于35.00的price元素的所有book元素 |
| /bookstore/book[price>35.00]/title | 选择book元素的所有标题元素book元素的price元素的值大于35.00 |
选择未知节点
XPath通配符可用于选择未知的XML节点。
| 通配符 | 描述 |
|---|---|
| * | 匹配任何元素节点 |
| @* | 匹配任何属性节点 |
| node() | 匹配任何类型的节点 |
在下表中,我们列出了一些路径表达式和表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| /bookstore/* | 选择书店元素的所有子元素节点 |
| //* | 选择文档中的所有元素 |
| //title[@*] | 选择至少具有一个任何类型属性的所有标题元素 |
选择多条路径
通过在XPath表达式中使用|操作符,可以选择多个路径。
在下表中,我们列出了一些路径表达式和表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| //book/title | //book/price | 选择所有book元素的所有title和price元素 |
| //title | //price | 选择文档中的所有标题和价格元素 |
| /bookstore/book/title | //price | 选择文档中book元素的book元素的所有title元素和price元素 |