使用sp_xml_preparedocument处理XML文档的方法(2)

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

localnamenvarchar(max)提供元素或属性的本地名称。如果 DOM 对象没有名称,则为 NULL。prefixnvarchar(max)节点名称的命名空间前缀。namespaceurinvarchar(max)节点的命名空间 URI。如果值是 NULL,则命名空间不存在。datatypenvarchar(max)元素或属性行的实际数据类型,否则是 NULL。数据类型是从内联 DTD 中或从内联架构中推断得出。prevbigint前一个同级元素的 XML ID。如果前面没有同级元素,则为 NULL。textntext包含文本形式的属性值或元素内容。如果边缘表项不需要值则为 NULL。


在WITH子句中,我们还可以通过设置来获取父级元素的属性值:

代码如下:


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

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
SELECT *
FROM OPENXML (@hdoc, '/ROOT/Customer/Order/OrderDetail',2)
WITH (OrderID int '../@OrderID',
CustomerID varchar(10) '../@CustomerID',
OrderDate datetime '../@OrderDate',
ProdID int '@ProductID',
Qty int '@Quantity')


查询的结果为:
OrderID CustomerID OrderDate ProdID Qty
———– ———- ———————– ———– ———–
10248 VINET 1996-07-04 00:00:00.000 11 12
10248 VINET 1996-07-04 00:00:00.000 42 10
10283 LILAS 1996-08-16 00:00:00.000 72 3
有时候XML中的数据并不是以属性的方式存在,而是直接放在节点中,如下:

代码如下:


DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order>
<OrderID>10248</OrderID>
<CustomerID>VINET</CustomerID>
<EmployeeID>5</EmployeeID>
<OrderDate>1996-07-04T00:00:00</OrderDate>
</Order>
</Customer>
</ROOT>'


此时要获Order节点下的各项的值,可以用下面方法:
代码如下:


DECLARE @hdoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order>
<OrderID>10248</OrderID>
<CustomerID>VINET</CustomerID>
<EmployeeID>5</EmployeeID>
<OrderDate>1996-07-04T00:00:00</OrderDate>
</Order>
</Customer>
</ROOT>'
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
SELECT *
FROM OPENXML (@hdoc, '/ROOT/Customer/Order',1)
WITH (OrderID int 'OrderID',
CustomerID varchar(10) 'CustomerID',
EmployeeID int 'EmployeeID',
OrderDate datetime 'OrderDate')


查询结果如下:
OrderID CustomerID EmployeeID OrderDate
———– ———- ———– ———————–
10248 VINET 5 1996-07-04 00:00:00.000
可以看出是取属性值还是取节点的文本的值区别在于WITH子句的第三个参数是否有@符号

标签:sp_xml_preparedocument,XML
0
投稿

猜你喜欢

  • ASP下批量删除数据的两种方法

    2011-02-05 11:01:00
  • js星级评分代码

    2008-05-02 21:07:00
  • 详解pygame捕获键盘事件的两种方式

    2021-02-27 08:51:54
  • python实现用户登录系统

    2023-10-13 13:17:22
  • WEB2.0网页制作标准教程(12)XHTML校验及常见错误

    2008-02-19 19:59:00
  • python有证书的加密解密实现方法

    2023-02-10 08:07:30
  • Python自定义进程池实例分析【生产者、消费者模型问题】

    2023-05-20 12:20:02
  • Python 获取numpy.array索引值的实例

    2021-01-19 21:36:57
  • git pull时冲突的几种解决方式(小结)

    2022-10-12 04:53:53
  • IE7的web标准之道 Ⅲ

    2008-08-20 12:55:00
  • python画图的函数用法以及技巧

    2021-11-01 17:58:19
  • python实现在sqlite动态创建表的方法

    2021-08-05 13:54:10
  • 与 Function 和 Object 相关的有趣代码

    2010-05-07 12:29:00
  • python3 读取Excel表格中的数据

    2021-01-14 23:03:42
  • 纯CSS实现导航下拉菜单

    2007-11-25 15:11:00
  • MySQL 学习总结 之 初步了解 InnoDB 存储引擎的架构设计

    2024-01-26 10:15:38
  • PHP getDocNamespaces()函数讲解

    2023-06-13 22:19:06
  • SQLServer 连接 EXCEL

    2009-07-09 19:00:00
  • Javascript 两个窗体之间传值实现代码

    2024-04-22 22:31:11
  • python把ipynb文件转换成pdf文件过程详解

    2022-07-27 23:50:24
  • asp之家 网络编程 m.aspxhome.com