XPath 範例

這個主題會檢閱整個 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()]

最後一個 <author> 項目,來自目前內容節點的 <book> 項目之整個 <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> 子系 (至少包含一個 <degree> 子系) 的所有 <book> 項目。

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"]

內含至少一個 <last-name> 項目子系 (含值 Bob) 的所有 <author> 項目。

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

擁有值 Bob 的第一個 <last-name> 子項目所在的所有 <author> 項目。請注意,其等同於下一資料列的運算式。

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

擁有值 Bob 的第一個 <last-name> 子項目所在的所有 <author> 項目。

Xml
degree[@from != "Harvard"]

包含不等於 "Harvard"from 屬性之所有 <degree> 項目。

Xml
author[. = "Matthew Bob"]

值為 Matthew Bob 的所有 <author> 項目。

Xml
author[last-name = "Bob" and ../price &gt; 50]

內含 <last-name> 子項目 (含值 Bob) 和 <price> 同層級項目 (其值大於 50) 的所有 <author> 項目。

Xml
book[position() &lt;= 3]

前三本書 (1、2、3)。

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

不含 <last-name> 子項目 (含值 Bob) 的所有 <author> 項目。

Xml
author[first-name = "Bob"]

內含至少一個 <last-name> 子系 (含值 Bob) 的所有 <author> 項目。

Xml
author[* = "Bob"]

所有包含值為 Bob 的任何子項目之作者項目。

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

具有 <last-name> 子項目 (含值 Bob) 和 <first-name> 子項目 (含值 Joe) 的所有 <author> 項目。

Xml
price[@intl = "Canada"]

內容節點中 intl 屬性等於 "Canada" 的所有 <price> 項目。

Xml
degree[position() &lt; 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> 項目的子系。

聯集範例 ( | )

為了展示聯集運算,我們使用下列 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

另請參閱

參考

位置路徑範例

概念

XPath 的 XML 檔範例語法 (inventory.xml)

標記 :


Page view tracker