使用sp_xml_preparedocument处理XML文档的方法

时间:2011-09-30 11:56:15 

有时会在存储过程中处理一些XML格式的数据,所以会用到sp_xml_preparedocument,他可以将XML数据进行读取,然后使用 MSXML 分析器 (Msxmlsql.dll) 对其进行分析。我们就可以很容易的在存储过程中得到XML中我们想要的数据。下面的代码就是使用sp_xml_preparedocument读取XML:

 代码如下:


DECLARE @hdoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
<OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
<Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
<OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc


上面只是读取了XML,要想获取XML数据还需要使用OPENXML,代码如下:

代码如下:


SELECT *
FROM openxml(@hdoc,'/ROOT/Customer',1)
WITH (CustomerID VARCHAR(40),ContactName VARCHAR(40))


OPENXML有三个参数:
第一个是sp_xml_preparedocument读取是的OUTPUT参数,在本示例中就是@hdoc;
第二个是一个XPath表达式,用来获取指定位置的数据;
第三个是一个可选项,用来表示获取的方式,有0,1,2,8四种取值,详细解释请看
FROM后面的WITH也是可选的,用来指定获取哪些数据字段,上面代码中只取了CustomerID和ContactName。上面的查询结果如下:
CustomerID ContactName
—————————————- —————————————-
VINET Paul Henriot
LILAS Carlos Gonzlez
如果不指定WITH子句,查询出来的是一个默认的表结构,如下:


表格列的解释说明:

列名数据类型说明idbigint文档节点的唯一 ID。


根元素的 ID 值为 0。保留负 ID 值。

parentidbigint标识节点的父节点。此 ID 标识的父节点不一定是父元素。具体情况取决于此 ID 所标识节点的子节点的节点类型。例如,如果节点为文本节点,则其父节点可能是一个属性节点。


如果节点位于 XML 文档的顶层,则其 ParentID 为 NULL。

节点类型int标识节点类型,是对应于 XML 对象模型 (DOM) 节点类型编号的一个整数。


下列值是可以显示在此列中以指明节点类型的值:

1 = 元素节点

2 = 属性节点

3 = 文本节点

4 = CDATA 部分节点

5 = 实体引用节点

6 = 实体节点

7 = 处理指令节点

8 = 注释节点

9 = 文档节点

10 = 文档类型节点

11 = 文档片段节点

12 = 表示法节点

有关详细信息,请参阅 Microsoft XML (MSXML) SDK 中的“节点类型属性”主题。

标签:sp_xml_preparedocument,XML
0
投稿

猜你喜欢

  • python 实现简单的吃豆人游戏

    2023-12-02 22:00:59
  • SQLServer2005重建索引前后对比分析

    2024-01-27 17:27:09
  • Python实现选择排序

    2021-06-17 03:23:40
  • python 读取dicom文件,生成info.txt和raw文件的方法

    2021-06-26 14:45:50
  • Python3实现的Mysql数据库操作封装类

    2024-01-20 23:57:36
  • Oracle数据库索引的维护

    2010-07-26 13:29:00
  • 设计的技术含量

    2009-01-12 18:20:00
  • 利用Python和OpenCV库将URL转换为OpenCV格式的方法

    2021-08-10 13:41:43
  • 我所钟爱的HTML5资源

    2010-07-23 09:25:00
  • PyCharm+Qt Designer+PyUIC安装配置教程详解

    2024-01-04 12:58:02
  • python对视频画框标记后保存的方法

    2022-09-23 03:20:05
  • 最适合人工智能开发的5种编程语言 附人工智能入门书籍

    2023-06-02 03:15:18
  • python实现简单学生信息管理系统

    2022-01-28 12:40:00
  • JS字符串处理实例代码

    2024-04-16 09:37:36
  • python常规方法实现数组的全排列

    2021-11-20 23:09:29
  • Python如何配置环境变量详解

    2021-11-20 08:18:21
  • 互联网产品设计师职业生涯

    2009-04-20 20:41:00
  • 不要犯WEB字体编辑的10种错误

    2008-08-19 12:55:00
  • 实例详解JavaScript中setTimeout函数的执行顺序

    2024-04-22 13:25:09
  • flask上传作品之dbm操作的实现

    2022-06-29 15:25:41
  • asp之家 网络编程 m.aspxhome.com