【转】XPath 示例

XPath 示例

 

 

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

 

Expressionhtml

引用java

./authornode

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

authorexpress

当前上下文中的全部 <author> 元素。app

first. nameide

当前上下文中的全部 <first.name> 元素。测试

/bookstoreui

此文档的文档元素 (<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:book

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

my:*

my 命名空间中的全部元素。

@my:*

my 命名空间中的全部属性(不包括 my 命名空间中的元素的未限定属性)。

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

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

Expression

引用

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 文件。

 

Expression

引用

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]

前三本书(一、二、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> 元素:

ms256086.collapse_all(zh-cn,VS.120).gifXML 文件 (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> 

ms256086.collapse_all(zh-cn,VS.120).gifXSLT 文件 (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> 

ms256086.collapse_all(zh-cn,VS.120).gif格式化输出

green,blue,blue,green

ms256086.collapse_all(zh-cn,VS.120).gif处理器输出

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

相关文章
相关标签/搜索