路徑運算式 (XQuery)
XQuery 路徑運算式會找出文件中的節點,例如元素、屬性及文字節點。路徑運算式的結果永遠發生在文件順序中,在結果時序中沒有重複的節點。在指定的路徑中,您可以使用未縮寫或縮寫的語法。下列資訊是著重在未縮寫的語法中。本主題稍後將說明縮寫語法。
附註: |
---|
因為本主題中的範例查詢是針對 xml 類型資料行 CatalogDescription 與 Instructions 所指定,在 ProductModel 資料表中,您應該熟悉這些資料行中所儲存的 XML 文件的內容與結構。如需詳細資訊,請參閱<在 AdventureWorks 資料庫中的 xml 資料類型表示法>。 |
路徑運算式可以是相對或絕對。下列是這兩種路徑的描述:
- 相對路徑運算式是由一或多步所組成,並以一或兩個斜線分隔 (/ 或 //)。例如,
child::Features
是相對路徑運算式,其中Child
只參考內容節點的子節點。這是目前所處理的節點。運算式會擷取內容節點的 <Features> 元素節點子系。 - 以一或兩個斜線開頭的絕對路徑運算式,後面接著選擇性的相對路徑。例如,運算式中的開頭斜線
/child::ProductDescription
,表示它是絕對路徑運算式。因為在運算式開頭的斜線會傳回內容節點的文件根節點,所以運算式會傳回文件根節點的所有 <ProductDescription> 元素節點子系。
如果絕對路線是以單一斜線開頭,它後面可能會或可能不會接著相對路徑。如果只指定單一斜線,運算式會傳回內容節點的根節點。對於 XML 資料類型,這是文件節點。
典型的路徑運算式是由數步所組成。例如,絕對路徑 /child::ProductDescription/child::Summary``
包含以斜線分隔的兩步。
- 第一步會擷取文件根節點的 <ProductDescription> 元素節點子系。
- 第二步會為每個擷取的 <ProductDescription> 元素節點擷取 <Summary> 元素節點子系,接著就變成內容節點。
路徑運算式中的一步可以是一個軸步或一般步。
軸步
路徑運算式中的軸步包含下列部份。
- 軸
定義移動的方向。路徑運算式中的軸步是從內容節點開始,並導覽回軸中所指定的可到達方向之節點。
- 節點測試
指定要選取的節點類型或節點名稱。
- 零或多個選擇性述詞
選擇一些節點並捨棄其他以篩選它們。
下列範例在路徑運算式中使用軸步:
- 絕對路徑運算式
/child::ProductDescription
只包含一個步驟。它指定一個軸 (child
) 及一個節點測試 (ProductDescription
)。 - 相對路徑運算式
child::ProductDescription/child::Features
包含以斜線分隔的兩步。兩步都指定子軸。ProductDescription 與 Features 都是節點測試。 - 相對路徑運算式
child::root/child::Location[attribute::LocationID=10]``
包含以斜線分隔的兩步。第一步指定一個軸 (child
) 及一個節點測試 (root
)。第二步指定一個軸步的所有三個元件:一個軸 (子系)、節點測試 (Location
) 以及述詞 ([attribute::LocationID=10]
)。
如需軸步元件的詳細資訊,請參閱<指定路徑運算式步驟中的座標軸、指定路徑運算式步驟中的節點測試 以及 在路徑運算式步驟中指定述詞>。
一般步
一般步只是一個必須評估為節點序列的運算式。
在 SQL Server 中的 XQuery 實作支援路徑運算式中做為第一步的一般步。下列是使用一般步的路徑運算式範例。
(/a, /b)/c
id(/a/b)
如需 id 函數的詳細資訊,請參閱<id 函數 (XQuery)>。
在此章節中
- 指定路徑運算式步驟中的座標軸
描述在路徑運算式中使用軸步。
- 指定路徑運算式步驟中的節點測試
描述在路徑運算式中使用節點測試。
- 在路徑運算式步驟中指定述詞
描述在路徑運算式中使用述詞。
- 在路徑運算式中使用縮寫語法
描述在路徑運算式中使用縮寫語法。