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 &gt; 50]包含值为 Bob 的 <last-name> 子元素和值大于 50 的 <price> 同级元素的所有 <author> 元素。
book[position() &lt;= 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() &lt; 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> 元素的子级。

 


为了演示 union 运算,我们使用以下 XPath 表达式:
x | y/x
在以下 XML 文件中选择所有值为 green 或 blue 的 <x> 元素:
XML 文件 (data1.xml)
Xml
< ?xml   version='1.0'? >
< ?xml-stylesheet   type="text/xsl" href="union.xsl"? >
< 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
< ?xml   version='1.0'? >
< xsl:stylesheet   version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform " >

< xsl:template   match="root">
< xsl:for-each   select="x | y/x">
< xsl:value-of   select="."/> ,
< xsl:if   test="not(position()=last())"> ,</ xsl:if >
</ xsl:for-each >
</ xsl:template >

</ xsl:stylesheet >


格式化输出
green,blue,blue,green

处理器输出

<?xml version="1.0" encoding="UTF-16"?>green,blue,blue,green
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值