XML 文档与数据库表

发表于:2007-07-02来源:作者:点击数: 标签:
包括SQL Server 7.0 在内的SQL Server 系列版本并不提供XML。 支持 开发 人员以前不得不使用一个XML 分析器,如微软的XML 分析器(MSXML),而且它们必须编写自己的代码来处理细节:把不同的元素从XML 文档中提取出来并按需要把它们放进关系表的不同部分,然

    包括SQL Server 7.0 在内的SQL Server 系列版本并不提供XML。 支持开发人 员以前不得不使用一个XML 分析器,如微软的XML 分析器(MSXML),而且它 们必须编写自己的代码来处理细节:把不同的元素从XML 文档中提取出来并按需 要把它们放进关系表的不同部分,然后访问关系表;或者编写代码将数据从数据库 表中提取出来,再以正确的格式放回到XML 文档中。当我们在享受XML 所带来 的好处时,我们常会发现自己在开发Web 应用程序时不得不应付这样的工作,而 且在开发不同的Web 应用程序时仍然不得不重新编写代码。由此可见,开发人员 真正需要的是一种在数据库中处理XML 的一般方法而这正是使用SQL Server 2000 时所能作到的,即在关系式数据表中存储XML 文档,从关系式数据中产生XML 文档。

20.3.1 从关系式数据中产生XML 文档
    在SQL Server 2000 中通过使用SELECT 语句可以把查询结果存储为XML 文 档而不是通常意义上的结果集,这样通过比原来少得多的编码就可以使Web 应用 或其它应用直接使用XML 文档,从而方便企业与供应商之间的业务交流。

    将关系数据库的查询结果显示成XML 文档是通过FOR XML 语句来完成的。在 使用FOR XML 语句的同时可以指定XML 的MODE (RAW、 AUTO、 EXPLICIT) 以及XMLDATA 的模式(Schema)。 FOR XML 语句的语法规则为:
FOR XML mode [, XMLDATA] [, ELEMENTS][, BINARY BASE64]
各参数的含义说明如下:
  • mode
    表示返回结果集的XML mode, 共有三种取值,即RAW、 AUTO、 EXPLICIT。
  • XMLDATA
    表示将返回XMLDATA 模式。
  • ELEMENTS
    使用该选项时,表示将相应的关系表列作为XML 文档的子元素;否则其将与 XML 属性相匹配。仅当选用AUTO 时才可以使用该选项。
  • BINARY BASE64
    表示由查询返回的二进制数据以64 位编码的形式显示。
1 RAW 模式
    使用RAW 模式时查询结果集中的每一行都作为XML 文档的一个元素,非空 列将作为相应的XML 文档元素的属性,其属性名与列名保持一致。


2 AUTO 模式
    使用AUTO 模式时查询结果集作为嵌套XML 元素。FROM 从句中的每一个表 名作为XML 元素,在SELECT 语句中的各列作为XML 文档元素的属性。如果使 用ELEMENTS 选项,则SELECT 语句中的各列作为XML 文档元素的子元素。

3 EXPLICIT 模式
    在使用EXPLICIT 模式时,查询复写器控制由查询返回的结果集所形成的XML 文档的格式,元素的嵌套层次。以及属性同时必须保证XML 文档是良构(wellformed) 的,并且具有有效的XML-DATA 模式。

20.3.2 在关系数据库表中存储XML 文档
    在实施B2C (商业到客户)电子商务模式的企业中,客户经常直接在Web 页 面订购产品支付现金,这些数据一般并不直接存入数据库中而是基于安全性以及 在统一标准下数据转换具有高效性的考虑而将其存储在XML 文档中,然后再存入 数据库中。这就需要从XML 文档中提取数据信息并将其存入关系数据库中。在SQL Server 2000 中OPENXML 语句提供了在关系数据库表中存储XML 文档的功能。
    OPENXML 是一个行集提供者,与表和视图极为相似。通过OPENXML 提取XML 文档数据与读取关系型行结果集数据一样简单、高效。在使用OPENXML 前必须 首先调用sp_xml_preparedocument 系统过程,其主要作用是解析XML 文档,并返 回该文档的文件指针。然后该文件指针传给OPENXML, 其根据传来的参数将XML 文档转换成行结果集。最后通过调用sp_xml_removedocument 系统过程来释放由 XML 文档所占用的内存空间。其具体执行过程请参看图20-2。


原文转自:http://www.ltesting.net