共用方式為


使用 XPath 查詢簡介 (SQLXML 4.0)

適用於:SQL ServerAzure SQL 資料庫

XML 路徑語言 (XPath) 查詢可以指定為 URL 或範本內的一部分。 對應架構會決定這個產生的片段結構,並從資料庫擷取值。 此程式在概念上類似於使用 CREATE VIEW 語句建立檢視,並對其撰寫 SQL 查詢。

注意

若要瞭解 SQLXML 4.0 中的 XPath 查詢,您必須熟悉 XML 檢視和相關概念,例如範本和對應架構。 如需詳細資訊,請參閱 批注式 XSD 架構簡介 (SQLXML 4.0)和萬維網聯合會 (W3C) 所定義的 XPath 標準。

XML 檔是由項目節點、屬性節點、文字節點等節點所組成。 例如,請考慮此 XML 檔:

<root>  
  <Customer cid= "C1" name="Janine" city="Issaquah">  
      <Order oid="O1" date="1/20/1996" amount="3.5" />  
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was  
          very satisfied</Order>  
   </Customer>  
   <Customer cid="C2" name="Ursula" city="Oelde" >  
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">  
          <Urgency>Important</Urgency>  
      </Order>  
      <Order oid="O4" date="1/20/1996" amount="10000"/>  
   </Customer>  
</root>  

在本檔中, <Customer> 是元素節點, cid 是屬性節點,而 “Important” 是文字節點。

XPath 是圖形導覽語言,用來從 XML 檔中選取一組節點。 每個 XPath 運算子都會根據先前 XPath 運算子所選取的節點集來選取節點集。 例如,假設有一組<客戶>節點,XPath 可以選取日期屬性值為 “7/14/1999” 的所有< Order> 節點。 產生的節點集包含訂單日期為 7/14/1999 的所有訂單。

XPath 語言是由萬維網聯合會 (W3C) 定義為標準導覽語言。 SQLXML 4.0 會實作位於 的 W3C XPath 規格 http://www.w3.org/TR/1999/PR-xpath-19991008.html子集。

以下是 W3C XPath 實作與 SQLXML 4.0 實作之間的主要差異。

  • 根查詢

    SQLXML 4.0 不支援根查詢 (/)。 每個 XPath 查詢都必須從架構中的最上層 <ElementType> 開始。

  • 報告錯誤

    W3C XPath 規格不會定義任何錯誤條件。 無法選取任何節點的 XPath 查詢會傳回空的節點集。 在 SQLXML 4.0 中,查詢可以傳回許多類型的錯誤訊息。

  • 檔順序

    在 SQLXML 4.0 中,不一定會決定文件順序。 因此,不會實作使用文件順序的數值述詞和座標軸(例如下列)。

    缺乏文件順序也表示只有在該節點對應至單一數據列的單一數據行時,才能評估節點的字串值。 具有子元素或IDREFS或NMTOKENS節點的項目無法轉換成字串。

    注意

    在某些情況下,關聯性批注中的索引鍵欄位批註或索引鍵可能會導致具決定性的文件順序。 不過,這不是這些批註的主要用法 如需詳細資訊,請參閱 使用 sql:key-fields 識別索引鍵數據行 (SQLXML 4.0)使用 sql:relationship 指定關聯性 (SQLXML 4.0)

  • 資料類型

    SQLXML 4.0 在實作 XPath 字串數位布爾 數據類型方面有限制。 如需詳細資訊,請參閱 XPath 數據類型(SQLXML 4.0)。

  • 跨產品查詢

    SQLXML 4.0 不支援跨產品 XPath 查詢,例如 Customers[Order/@OrderDate=Order/@ShipDate]。 此查詢會選取 OrderDate 等於任何訂單之 ShipDate 的所有客戶。

    不過,SQLXML 4.0 支持查詢,例如 Customer[Order[@OrderDate=@ShippedDate]],它會選取 OrderDate 等於 ShipDate 的任何訂單的客戶。

  • 錯誤處理和安全性

    根據所使用的架構和 XPath 查詢表達式而定,Transact-SQL 錯誤可能會在特定情況下公開給使用者。

下列各節中的表格提供 SQLXML 4.0 中 XPath 查詢實作與這些區域中 W3C 規格有何不同的詳細數據。

支援的功能

下表顯示 SQLXML 4.0 中實作的 XPath 語言功能。

功能 項目 範例查詢的連結
attributechildparentself axes 在 XPath 查詢中指定座標軸 (SQLXML 4.0)
布爾值述詞,包括連續和巢狀述詞 在 XPath 查詢中指定算術運算子 (SQLXML 4.0)
所有關係運算子 =、!=、、<=、>>= < 在 XPath 查詢中指定關係運算子 (SQLXML 4.0)
算術運算子 +、-、*、div 在 XPath 查詢中指定算術運算子 (SQLXML 4.0)
明確的轉換函式 number()string()布爾值() 在 XPath 查詢中指定明確轉換函數 (SQLXML 4.0)
布林運算子 AND、OR 在 XPath 查詢中指定布林運算子 (SQLXML 4.0)
布爾函數 true()false()not() 在 XPath 查詢中指定布林函數 (SQLXML 4.0)
XPath 變數 在 XPath 查詢中指定 XPath 變數 (SQLXML 4.0)

不支援的功能

下表顯示未在 SQLXML 4.0 中實作的 XPath 語言功能。

功能 項目
ancestor、ancestor-or-self、descendant、descendant-or-self (//)following、following-siblingnamespacepreceding、preceding、preceding-sibling
數值述詞
算術運算子 mod
節點函式 ancestor、ancestor-or-self、descendant、descendant-or-self (//)following、following-siblingnamespacepreceding、preceding、preceding-sibling
字串函數 string(), concat()starts-with(), contains(), substring-before()substring-after(), substring(), string-length()normalize()translate()
布爾函數 朗()
數值函數 sum()floor()ceiling()round()
等位運算子 |

當您在樣本中指定 XPath 查詢時,請注意下列行為:

  • XPath 可以包含或 和 等 < 字元,在 XML 中具有特殊意義(且範本是 XML 檔)。 您必須使用 XML 和編碼逸出這些字元,或在 URL 中指定 XPath。

另請參閱

在 SQLXML 4.0 中使用 XPath 查詢