天天看點

克服 OpenXML 障礙

OPENXML (Transact-SQL)

OPENXML 通過 XML 文檔提供行集視圖。由于 OPENXML 是行集提供程式,是以可在會出現行集提供程式(如表、視圖或 OPENROWSET 函數)的 Transact-SQL 語句中使用 OPENXML。

Transact-SQL 文法約定

 文法

 參數

<dl></dl>

<dt></dt>

idoc

<dd></dd>

XML 文檔的内部表式形式的文檔句柄。通過調用 sp_xml_preparedocument 建立 XML 文檔的内部表式形式。

rowpattern

XPath 模式,用來辨別要作為行處理的節點(這些節點在 XML 文檔中,該文檔的句柄由 idoc 參數傳遞)。

flags

訓示應在 XML 資料和關系行集間使用映射以及應如何填充溢出列。flags 為可選輸入參數,可以是下列值之一:

位元組值

說明

預設為“以屬性為中心”的映射。

1

使用“以屬性為中心”的映射。可以與 XML_ELEMENTS 一起使用。這種情況下,首先應用“以屬性為中心”的映射,然後對所有未處理的列應用“以元素為中心”的映射。

2

使用“以元素為中心”的映射。可以與 XML_ATTRIBUTES 一起使用。這種情況下,首先應用“以屬性為中心”的映射,然後對所有未處理的列應用“以元素為中心”的映射。

8

可與 XML_ATTRIBUTES 或 XML_ELEMENTS 組合使用(邏輯或)。在檢索的上下文中,該标志訓示不應将已使用的資料複制到溢出屬性 @mp:xmltext。

如果您正在編寫使用 XML 作為資料交換格式的應用程式,您需要用一種方法從 XML 文檔提取資料,并将該資料存儲在您的資料庫中。T-SQL 的 OpenXML 關鍵字是一種在 SQL Server 2000 中插入、删除和更新資料的簡便方法。OpenXML 在 T-SQL 存儲過程内建立 XML 文檔的一個或多個關系視圖(或行集合)。您可以通路那些視圖中的資料,以便對您的資料庫執行關系操作。雖然 OpenXML 相當易于使用,但在實際應用程式中使用它之前,您需要克服幾個障礙。我已經在 Exploring XML 專欄 2001 年 7 月的文章 (InstantDoc ID 21077) 和 2001 年 8 月的文章 (InstantDoc ID 21259) 中讨論了最大的障礙 — 将 XML 文檔傳遞到存儲過程時遇到的困難。現在讓我們來看看兩個您可能遇到的其他常見的 OpenXML 障礙。

<b>聲明命名空間字首</b>

實際應用中的 XML 文檔使用命名空間受限的元素來確定處理資料的應用程式正确地解釋文檔。如果您的應用程式使用 OpenXML 從 XML 文檔提取資料,您可能需要在某一點将命名空間受限的元素指定為 OpenXML 用于構造關系視圖的行模式和列模式的 XPath 查詢。行模式使用 XPath 查詢從 XML 文檔選擇與關系視圖中的行相對應的元素。列模式使用 XPath 查詢為每一行選擇列。指定命名空間受限的元素或屬性可能是個挑戰,尤其是在您不知道在 XML 中将使用哪些字首的情況下。命名空間字首提供了一種簡化的方法,以便指定元素或屬性屬于由統一資源辨別符 (URI) 定義的特定命名空間。您不能依靠與特定命名空間相關聯的字首,因為命名空間規範允許您随意選擇字首,甚至允許不同的字首對應于同一個命名空間。(有關命名空間規範的更多資訊,請參見 Namespaces in XML 規範,網址是 http://www.w3.org/TR/1999/REC-xml-names-19990114/。)不過,通過使用系統存儲過程,您可以克服未聲明的命名空間字首的問題。

Sp_xml_preparedocument 是一個系統提供的存儲過程,T-SQL 可用它将 XML 文檔解析為記憶體中的表示形式,并将一個數字句柄傳回到記憶體中的文檔。OpenXML 使用此句柄來獲得 XML 文檔的記憶體中的表示形式,并生成一個合并了該文檔包含的資料的行集合。如果您以前使用過 sp_xml_preparedocument,您應該很熟悉第一個參數(XML 文檔的記憶體中的表示形式的句柄)和第二個參數(解析到記憶體中的 XML 文檔)。但可能令您感到驚訝的是,您可以将第三個可選參數傳遞到 sp_xml_preparedocument。此參數包含為您可以在 OpenXML 文法中使用的命名空間聲明字首的 XML 文檔。您隻需為該文檔編寫一個根元素,然後在上面加入命名空間聲明即可。例如, XML 文檔為與 "urn:myPerson

繼續閱讀