本主題回顧整個 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 > 50] |
包含值爲 Bob 的 <last-name> 子元素和值大於 50 的<price> 同級元素的全部 <author> 元素。 |
book[position() <= 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() < 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 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 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