使用 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。然后忽略子元素的属性值。
对于具有相同名称的多个子元素,将返回第一个节点。