使用 WITH 子句指定現有表
可以使用 WITH 字句指定現有表的名稱。若要執行此操作,只需指定現有的表名稱,OPENXML 可以使用該表的架構生成行集。
使用 WITH 子句指定架構
可以使用 WITH 子句指定完整架構。在指定行集架構時,可指定列名、它們的數據類型,以及它們到 XML 文檔的映射。
可以使用 SchemaDeclaration 中的 ColPattern 參數來指定列模式。指定的列模式用于將行集列映射到 rowpattern 標識的 XML 節點并確定映射類型。
如果沒有為列指定 ColPattern,則行集列根據 flags 參數指定的映射來映射到具有相同名稱的 XML 節點。但是,如果在 WITH 子句中將 ColPattern 指定為架構描述的一部分,則它將覆蓋在 flags 參數中指定的映射。
行集列和 XML 節點之間的映射
在 OPENXML 語句中,可以選擇指定行集列和 rowpattern 標識的 XML 節點之間的映射類型(如以屬性為中心或以元素為中心)。此信息用于 XML 節點和行集列之間的轉換。
可以采用下列兩種方式之一來指定映射,也可以同時采用來指定映射:
通過使用 flags 參數
由 flags 參數指定的映射采用名稱對應,即 XML 節點映射到具有相同名稱的對應行集列。
通過使用 ColPattern 參數
ColPattern 是 XPath 表達式,被指定為 WITH 子句中的 SchemaDeclaration 的一部分。在 ColPattern 中指定的映射覆蓋 flags 參數指定的映射。
ColPattern 可以用于指定映射類型(如以屬性為中心或以元素為中心),以覆蓋或增強 flags 指定的默認映射。
在下列情況下指定 ColPattern:
行集中的列名不同于它映射到的元素名稱或屬性名稱。在這種情況下,ColPattern 用于標識行集列映射到的 XML 元素名稱和屬性名稱。
希望將元屬性特性映射到列。在這種情況下,ColPattern 用于標識行集列映射到的元屬性。有關如何使用元屬性的詳細信息,請參閱在 OPENXML 中指定元屬性。
flags 和 ColPattern 參數都是可選的。如果未指定映射,則采用以屬性為中心的映射。以屬性為中心的映射是 flags 參數的默認值。
以屬性為中心的映射
將 OPENXML 中的 flags 參數設置為 1 (XML_ATTRIBUTES) 將指定“以屬性為中心”的映射。如果 flags 包含 XML_ATTRIBUTES,則顯示的行集提供或使用其中每個 XML 元素都表示為一行的那些行。XML 屬性根據名稱對應映射到 SchemaDeclaration 中定義的屬性,或 WITH 子句的 Tablename 提供的屬性。名稱對應表示具有特定名稱的 XML 屬性都以相同名稱存儲在行集中的列內。
如果列名不同于它映射到的屬性名稱,則必須指定 ColPattern。
如果 XML 屬性具有命名空間限定符,則行集中的列名也必須有該限定符。
以元素為中心的映射
將 OPENXML 中的 flags 參數設置為 2 (XML_ELEMENTS) 將指定“以元素為中心”的映射。除了下列差異外,它與“以屬性為中心”的映射相似:
除非指定列級模式,否則映射的名稱對應(例如,映射到具有相同名稱的 XML 元素的列)選擇不復雜的子元素。在檢索過程中,如果子元素復雜(因為它包含其他子元素),則將列設置為 NULL。然后忽略子元素的屬性值。
對于具有相同名稱的多個子元素,將返回第一個節點。