路徑運算式 - 使用縮寫語法
適用於:SQL Server
瞭解 XQuery 中路徑表示式的所有範例,都會針對路徑表達式使用未細分的語法。 路徑表達式中座標軸步驟的未區分語法包括座標軸名稱和節點測試,並以雙冒號分隔,後面接著零個或多個步驟限定符。
例如:
child::ProductDescription[attribute::ProductModelID=19]
XQuery 支援下列縮寫,以用於路徑表示式:
子軸是預設座標軸。 因此, 您可以從表達式中的步驟省略 child:: 軸。 例如,
/child::ProductDescription/child::Summary
可以撰寫為/ProductDescription/Summary
。屬性軸可以縮寫為 @。 例如,
/child::ProductDescription[attribute::ProductModelID=10]
可以撰寫為/ProductDescription[@ProductModelID=10]
。/descendant-or-self::node()/ 可以縮寫為 /1000。 例如,
/descendant-or-self::node()/child::act:telephoneNumber
可以撰寫為//act:telephoneNumber
。上一個查詢會擷取聯繫人數據表中 AdditionalContactInfo 數據行中儲存的所有電話號碼。 AdditionalContactInfo 的架構是以telephoneNumber>元素可在檔中任何位置出現的方式<定義。 因此,若要擷取所有電話號碼,您必須搜尋檔中的每個節點。 搜尋會從檔的根目錄開始,並繼續進行所有子代節點。
下列查詢會擷取特定客戶連絡人的所有電話號碼:
SELECT AdditionalContactInfo.query(' declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes"; declare namespace crm="https://schemas.adventure-works.com/Contact/Record"; declare namespace ci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo"; /descendant-or-self::node()/child::act:telephoneNumber ') as result FROM Person.Contact WHERE ContactID=1
如果您將路徑表達式取代為縮寫語法,
//act:telephoneNumber
您會收到相同的結果。步驟 中的 self::node() 可以縮寫為單一點 (.. )。 不過,點與 self::node()不相等或可互換。
例如,在下列查詢中,點的使用代表值,而不是節點:
("abc", "cde")[. > "b"]
步驟 中的 parent::node() 可以縮寫為雙點 (..)。