读书人

XPath 示范

发布时间: 2012-11-06 14:07:00 作者: rapoo

XPath 示例

原帖地址
http://msdn.microsoft.com/zh-cn/library/ms256086.aspx

?
本主题回顾整个 XPath 参考中出现的语法示例。 所有示例均基于?XPath 语法的示例 XML 文件 (inventory.xml)。 有关在测试文件中使用 XPath 表达式的示例,请参见本主题最后的“联合 ( | ) 示例”。?表达式引用./author当前上下文中的所有?<author>?元素。注意,此表达式等效于下一行中的表达式。author当前上下文中的所有?<author>?元素。first.name当前上下文中的所有?<first.name>?元素。/bookstore此文档的文档元素 (<bookstore>)。//author文档中的所有?<author>?元素。book[/bookstore/@specialty=@style]style?属性值等于文档根处?<bookstore>?元素的?specialty?属性值的所有?<book>?元素。author/first-name作为?<author>?元素子级的所有?<first-name>?元素。bookstore//title<bookstore>?元素中一级或多级深度的所有?<title>?元素(任意后代)。注意,此表达式不同于下一行中的表达式。bookstore/*/title作为?<bookstore>?元素的孙代的所有?<title>?元素。bookstore//book/excerpt//emph位于?<book>?元素的?<excerpt>?子级内任意位置和位于?<bookstore>?元素内任意位置的所有?<emph>?元素。.//title当前上下文中一级或多级深度的所有?<title>?元素。注意,本质上只有这种情况需要句点表示法。author/*作为?<author>?元素子级的所有元素。book/*/last-name作为?<book>?元素孙级的?<last-name>?所有元素。*/*当前上下文的所有孙级元素。*[@specialty]具有?specialty?属性的所有元素。@style当前上下文的?style?属性。price/@exchange当前上下文中?<price>?元素上的?exchange?属性。price/@exchange/total返回空节点集,因为属性不包含元素子级。 XML 路径语言 (XPath) 语法允许使用此表达式,但是严格意义上讲无效。book[@style]当前上下文的具有?style?属性的?<book>?所有元素。book/@style当前上下文的所有?<book>?元素的?style?属性。@*当前元素上下文的所有属性。./first-name当前上下文节点中的所有?<first-name>?元素。 请注意,这等效于下一行中的表达式。first-name当前上下文节点中的所有?<first-name>?元素。author[1]当前上下文节点中的第一个?<author>?元素。author[first-name][3]具有?<first-name>?子级的第三个?<author>?元素。my:bookmy?命名空间中的?<book>?元素。my:*my?命名空间中的所有元素。@my:*my?命名空间中的所有属性(不包括?my?命名空间中的元素的未限定属性)。

注意,索引相对于父级。 考虑以下数据:

?

<x>
<y/>
<y/>
</x>
<x>
<y/>
<y/>
</x>

?表达式引用x/y[1]每个?<x>?的第一个?<y>?子级。 此表达式等效于下一行中的表达式。x/y[position() = 1]每个?<x>?的第一个?<y>?子级。(x/y)[1]<x>?元素的整个?<y>?子级集合中的第一个?<y>。x[1]/y[2]第一个?<x>?的第二个?<y>?子级。

其他示例引用 XPath 的示例 XML 文件。

?表达式引用book[last()]前上下文节点的最后一个?<book>?元素。book/author[last()]前上下文节点的每个?<book>?元素的最后一个?<author>?子级。(book/author)[last()]当前上下文节点的?<book>?元素的整个?<author>?子级集合中的最后一个?<author>?元素。book[excerpt]包含至少一个?<excerpt>?元素子级的所有?<book>?元素。book[excerpt]/title作为?<book>?元素子级,同时包含至少一个?<excerpt>?元素子级的所有?<title>?元素。book[excerpt]/author[degree]包含至少一个?<degree>?元素子级,并作为同样包含至少一个?<excerpt>?元素的?<book>?元素的子级的所有?<author>?元素。book[author/degree]包含?<author>?子级,这些子级又包含至少一个?<degree>?子级的所有?<book>?元素author[degree][award]包含至少一个?<degree>?元素子级和至少一个?<award>?元素子级的所有?<author>?元素。author[degree and award]包含至少一个?<degree>?元素子级和至少一个?<award>?元素子级的所有?<author>?元素。author[(degree or award) and publication]包含至少一个?<degree>?或?<award>?和至少一个?<publication>?作为子级的所有?<author>?元素。author[degree and not(publication)]包含至少一个?<degree>?元素子级并且不包含?<publication>?元素子级的所有?<author>?元素。author[not(degree or award) and publication]包含至少一个?<publication>?元素子级,但不包含?<degree>?或?<award>?元素子级的所有?<author>?元素。author[last-name = "Bob"]包含至少一个值为?Bob?的?<last-name>?元素子级的所有?<author>?元素。author[last-name[1] = "Bob"]第一个?<last-name>?子元素的值为?Bob?的所有?<author>?元素。 请注意,这等效于下一行中的表达式。author[last-name [position()=1]= "Bob"]第一个?<last-name>?子元素的值为?Bob?的所有?<author>?元素。degree[@from != "Harvard"]from?属性不等于?"Harvard"?的所有?<degree>?元素。author[. = "Matthew Bob"]值为?Matthew Bob?的所有?<author>?元素。author[last-name = "Bob" and ../price > 50]包含值为?Bob?的?<last-name>?子元素和值大于 50 的?<price>?同级元素的所有?<author>?元素。book[position() <= 3]前三本书(1、2、3)。author[not(last-name = "Bob")]不包含值为?Bob?的?<last-name>?子元素的所有?<author>?元素。author[first-name = "Bob"]至少有一个值为?Bob?的<first-name>?子级的所有?<author>?元素。author[* = "Bob"]所有包含任何值为?Bob?的子元素的 author 元素。author[last-name = "Bob" and first-name = "Joe"]具有值为?Bob?的?<last-name>?子元素和值为?Joe?的?<first-name>?子元素的所有?<author>?元素。price[@intl = "Canada"]上下文节点中?intl?属性等于?"Canada"?的所有?<price>?元素。degree[position() < 3]作为上下文节点子级的前两个?<degree>?元素。p/text()[2]上下文节点中每个?<p>?元素的第二个文本节点。ancestor::book[1]上下文节点最近的?<book>?上级。ancestor::book[author][1]上下文节点最近的?<book>?上级,并且此?<book>?元素具有?<author>?元素作为其子级。ancestor::author[parent::book][1]当前上下文最近的?<author>?上级,并且此?<author>?元素是?<book>?元素的子级。

?

XPath 示范??联合 ( | ) 示例
为了演示 union 运算,我们使用以下 XPath 表达式:
x | y/x
在以下 XML 文件中选择所有值为?green?或?blue?的 <x> 元素:
XML 文件 (data1.xml)Xml<?xml>
<root>
<x>green</x>
<y>
<x>blue</x>
<x>blue</x>
</y>
<z>
<x>red</x>
<x>red</x>
</z>
<x>green</x>
</root>

XSLT 文件 (union.xsl)

Xml<?xmlgreen,blue,blue,green

处理器输出

<?xml version="1.0" encoding="UTF-16"?>green,blue,blue,green

读书人网 >Web前端

热点推荐