克服 OpenXML 障碍

OPENXML (Transact-SQL)
OPENXML 通过 XML 文档提供行集视图。由于 OPENXML 是行集提供程序,因此可在会出现行集提供程序(如表、视图或 OPENROWSET 函数)的 Transact-SQL 语句中使用 OPENXML。
Transact-SQL 语法约定
OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] ) 
[ WITH ( SchemaDeclaration | TableName ) ]
idoc
XML 文档的内部表式形式的文档句柄。通过调用 sp_xml_preparedocument 创建 XML 文档的内部表式形式。
rowpattern
XPath 模式,用来标识要作为行处理的节点(这些节点在 XML 文档中,该文档的句柄由 idoc 参数传递)。
flags
指示应在 XML 数据和关系行集间使用映射以及应如何填充溢出列。 flags 为可选输入参数,可以是下列值之一:

字节值 说明
0
默认为“以属性为中心” 的映射。
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 障碍。
声明命名空间前缀
实际应用中的 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

你可能感兴趣的:(职场,休闲,OpenXml)