XPath 语法
XPath语法
XPath表达式使用诸如URL之类的路径符号来寻址XML文档的某些部分。计算该表达式以产生节点集,布尔值,数字或字符串类型的对象。例如,如果在源XML文档中声明了
元素,则表达式book/author将返回
元素中包含的元素的节点集。
在XPath中,路径表达式用于选择XML文档中的节点或节点集。通过遵循路径或步骤选择节点。
我们来看一个XPath的语法。在这里,我们获取一个XML文档。
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="en">Three Mistakes of My Life</title>
<price>110</price>
</book>
<book>
<title lang="en">Immortals of Meluha</title>
<price>200</price>
</book>
</bookstore>
选择节点
用于选择节点的路径表达式为:
表达 |
说明 |
节点名称 |
选择所有名称为" nodename"的节点 |
/ |
从根节点中选择。 |
// |
从当前节点中选择与所选内容匹配的文档节点,无论它们在何处。 |
。 |
选择当前节点 |
.. |
选择当前节点的父级 |
@ |
选择属性 |
在上面的示例中查看路径表达式及其详细信息:
路径表达式 |
结果 |
bookstore |
选择所有名称为" bookstore"的节点 |
/bookstore |
选择根元素书店。 注意: 如果路径以斜杠(/)开头,则始终表示元素的绝对路径! |
bookstore/book |
选择所有属于书店子级的书元素。 |
//book |
选择所有书籍元素,无论它们在文档中的位置如何。 |
bookstore//book |
选择所有属于bookstore元素的书本元素,无论它们位于bookstore元素下的何处。 |
//@@lang |
选择所有名为lang的属性。 |
谓词
谓词用于查找特定节点或包含特定值的节点。
谓词始终嵌入在方括号中
在下表中,我们列出了一些带有谓词的路径表达式以及表达式的结果:
路径表达式 |
结果 |
/bookstore/book [1] |
选择作为bookstore元素的子元素的第一本book元素。 注意: 在IE 5,6,7,8,9中,第一个节点是[0],但根据W3C,它是[1]。要解决IE中的此问题,请将selectionlanguage设置为XPath:
在JavaScript中: xml.setProperty("SelectionLanguage"," XPath");
|
/bookstore/book[last()] |
选择最后一个book元素,它是bookstore元素的子元素。 |
/bookstore/book[last()-1] |
选择最后一个但只有一个book元素,它是bookstore元素的子元素。 |
/bookstore/book[position()<3] |
选择前两个book元素,它们是bookstore元素的子元素。 |
//title[@lang] |
选择所有具有名为lang的属性的标题元素。 |
//title[@lang ='en'] |
选择所有具有" lang"属性且值为" en"的标题元素。 |
/bookstore/book [price> 100] |
选择bookstore元素中价格元素大于100的所有book元素 |
/bookstore/book[price > 100]/book |
在bookstore元素的book元素中选择价格元素大于100的所有title元素 |
选择未知节点
XPath通配符用于选择未知XML节点。
通配符 |
说明 |
* |
匹配任何元素节点 |
@ * |
匹配任何属性节点 |
node() |
匹配任何种类的任何节点 |
请参见上例:
路径表达式 |
结果 |
/bookstore/* |
选择书店元素的所有子元素节点 |
//* |
选择文档中的所有元素 |
//title[@ *] |
选择具有至少一种任何类型属性的所有标题元素 |
选择多个路径
XPath表达式中使用运算符选择多个路径。从上面的示例中,我们列出了一些路径表达式和表达式的结果。
路径表达式 |
结果 |
//book/title|//book/price |
选择所有书籍元素的所有标题和价格元素 |
//title|//price |
选择文档中的所有标题和价格元素 |
/bookstore/book/title|//price |
选择bookstore元素的book元素的所有title元素以及文档中的所有price元素 |