Share via


路徑運算式 (XQuery)

XQuery 路徑運算式會找出文件中的節點,例如元素、屬性及文字節點。路徑運算式的結果永遠發生在文件順序中,在結果時序中沒有重複的節點。在指定的路徑中,您可以使用未縮寫或縮寫的語法。下列資訊是著重在未縮寫的語法中。本主題稍後將說明縮寫語法。

[!附註]

因為本主題中的範例查詢是針對 xml 類型資料行 CatalogDescriptionInstructions 所指定,在 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)>。

在此章節中