您的位置:首页 > 其它

最全的xpath语法

2016-06-10 23:15 281 查看
原文:https://msdn.microsoft.com/zh-cn/library/ms256086(v=vs.80).aspx

本主题回顾整个 XPath 参考中出现的语法示例。所有示例均基于 XPath 语法的示例 XML 文件 (inventory.xml)。有关在测试文件中使用 XPath
表达式的示例,请参见本主题最后的“联合 ( | ) 示例”。

表达式引用
XML

./author


当前上下文中的所有 <author> 元素。注意,此表达式等效于下一行中的表达式。
XML

author


当前上下文中的所有 <author> 元素。
XML

first.name


当前上下文中的所有 <first.name> 元素。
XML

/bookstore


本文档的文档元素 (<bookstore>)。
XML

//author


文档中的所有 <author> 元素。
XML

book[/bookstore/@specialty = @style]


style 属性值等于文档根目录的 <bookstore> 元素的 specialty 属性值的所有 <book>元素。
XML

author/first-name


属于 <author> 元素的子级的所有 <first-name> 元素。
XML

bookstore//title


<bookstore> 元素中更深的一级或多级(任意子代)的所有 <title> 元素。注意,此表达式不同于下一行中的表达式。
XML

bookstore/*/title


属于 <bookstore> 元素的孙级的所有 <title> 元素。
XML

bookstore//book/excerpt//emph


<book> 元素的 <excerpt> 子级中的任意位置和 <bookstore> 元素中的任意位置的所有 <emph> 元素。
XML

.//title


当前上下文中更深的一级或多级的所有 <title> 元素。注意,本质上只有这种情况需要句点表示法。
XML

author/*


属于 <author> 元素的子级的所有元素。
XML

book/*/last-name


属于 <book> 元素的孙级的所有 <last-name> 元素。
XML

*/*


当前上下文的所有孙级元素。
XML

*[@specialty]


具有 specialty 属性的所有元素。
XML

@style


当前上下文的 style 属性。
XML

price/@exchange


当前上下文中 <price> 元素的 exchange 属性。
XML

price/@exchange/total


返回空节点集,因为属性不包含元素子级。XML 路径语言 (XPath) 语法允许使用此表达式,但是严格意义上讲无效。
XML

book[@style]


当前上下文的具有 style 属性的所有 <book> 元素。
XML

book/@style


当前上下文的所有 <book> 元素的 style 属性。
XML

@*


当前元素上下文的所有属性。
XML

./first-name


当前上下文节点中的所有 <first-name> 元素。注意,此表达式等效于下一行中的表达式。
XML

first-name


当前上下文节点中的所有 <first-name> 元素。
XML

author[1]


当前上下文节点中的第一个 <author> 元素。
XML

author[first-name][3]


具有 <first-name> 子级的第三个 <author> 元素。
XML

my:book


my 命名空间中的 <book> 元素。
XML

my:*


my 命名空间中的所有元素。
XML

@my:*


my 命名空间中的所有属性(不包括 my 命名空间中的元素的未限定属性)。
注意,索引相对于父级。考虑以下数据:

XML

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


表达式引用
XML

x/y[1]


每个 <x> 的第一个 <y> 子级。此表达式等效于下一行中的表达式。
XML

x/y[position() = 1]


每个 <x> 的第一个 <y> 子级。
XML

(x/y)[1]


<x> 元素的整个 <y> 子级元素集中的第一个 <y>。
XML

x[1]/y[2]


第一个 <x> 的第二个 <y> 子级。
其他示例引用 XPath 的示例 XML 文件。

表达式引用
book[last()]
当前上下文节点的最后一个 <book> 元素。
XML

book/author[last()]


当前上下文节点的每个 <book> 元素的最后一个 <author> 子级。
XML

(book/author)[last()]


当前上下文节点的 <book> 元素的整个 <author> 子级元素集中的最后一个 <author> 元素。
XML

book[excerpt]


至少包含一个 <excerpt> 元素子级的所有 <book> 元素。
XML

book[excerpt]/title


属于 <book> 元素(也至少包含一个 <excerpt> 元素子级)的子级的所有 <title> 元素。
XML

book[excerpt]/author[degree]


至少包含一个 <degree> 元素子级并且属于 <book> 元素(也至少包含一个 <excerpt> 元素)子级的所有 <author> 元素。
XML

book[author/degree]


所有包含 <author> 子级的 <book> 元素,该子级至少包含一个<degree> 子级。
XML

author[degree][award]


至少包含一个 <degree> 元素子级以及至少包含一个 <award> 元素子级的所有 <author> 元素。
XML

author[degree and award]


至少包含一个 <degree> 元素子级以及至少包含一个 <award> 元素子级的所有 <author> 元素。
XML

author[(degree or award) and publication]


至少包含一个 <degree> 或 <award> 以及至少包含一个 <publication>子级的所有 <author> 元素。
XML

author[degree and not(publication)]


至少包含一个 <degree> 元素子级并且不包含 <publication> 元素子级的所有 <author> 元素。
XML

author[not(degree or award) and publication]


至少包含一个 <publication> 元素子级并且不包含 <degree> 和<award> 元素子级的所有 <author> 元素。
author[last-name = "Bob"]
至少包含一个值为 Bob 的 <last-name> 元素子级的所有 <author> 元素。
XML

author[last-name[1] = "Bob"]


第一个 <last-name> 子元素的值为 Bob 的所有 <author> 元素。注意,此表达式等效于下一行中的表达式。
XML

author[last-name [position()=1]= "Bob"]


第一个 <last-name> 子元素的值为 Bob 的所有 <author> 元素。
XML

degree[@from != "Harvard"]


from 属性不等于 "Harvard" 的所有 <degree> 元素。
XML

author[. = "Matthew Bob"]


所有值为 Matthew Bob 的 <author> 元素。
XML

author[last-name = "Bob" and ../price > 50]


包含值为 Bob 的 <last-name> 子元素以及值大于
50 的 <price> 同辈元素的所有 <author> 元素。
XML

book[position() <= 3]


前三本书(1、2、3)。
XML

author[not(last-name = "Bob")]


不包含值为 Bob 的 <last-name> 子元素的所有 <author> 元素。
XML

author[first-name = "Bob"]


至少包含一个值为 Bob 的 <first-name> 元素的所有 <author> 元素。
XML

author[* = "Bob"]


所有包含任何值为 Bob 的子元素的 author 元素。
XML

author[last-name = "Bob" and first-name = "Joe"]


所有包含值为 Bob 的 <last-name> 子元素和值为 Joe 的 <first-name>子元素的 <author> 元素。
XML

price[@intl = "Canada"]


上下文节点中所有 intl 属性等于 "Canada" 的 <price> 元素。
XML

degree[position() < 3]


属于上下文节点子级的前两个 <degree> 元素。
XML

p/text()[2]


上下文节点中每个 <p> 元素的第二个文本节点。
XML

ancestor::book[1]


与上下文节点最接近的 <book> 上级。
XML

ancestor::book[author][1]


与上下文节点最接近的 <book> 上级,并且此 <book> 元素包含<author> 元素子级。
XML

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: