校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 使用sp_xml_preparedocument處理XML文檔的方法

使用sp_xml_preparedocument處理XML文檔的方法

熱門標簽:數字匠心電銷機器人 沒聽見電話機器人幫你接 蘭州語音外呼系統運營商 陜西電銷外呼系統好用嗎 al智能電話機器人 成都電話外呼系統一般多少錢 銀川高頻外呼回撥系統多少錢 如何做地圖標注圖鋪 最新人工智能電銷機器人

有時會在存儲過程中處理一些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子句,查詢出來的是一個默認的表結構,如下:


表格列的解釋說明:

列名 數據類型 說明
id bigint 文檔節點的唯一 ID。

根元素的 ID 值為 0。保留負 ID 值。

parentid bigint 標識節點的父節點。此 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 中的“節點類型屬性”主題。

localname nvarchar(max) 提供元素或屬性的本地名稱。如果 DOM 對象沒有名稱,則為 NULL。
prefix nvarchar(max) 節點名稱的命名空間前綴。
namespaceuri nvarchar(max) 節點的命名空間 URI。如果值是 NULL,則命名空間不存在。
datatype nvarchar(max) 元素或屬性行的實際數據類型,否則是 NULL。數據類型是從內聯 DTD 中或從內聯架構中推斷得出。
prev bigint 前一個同級元素的 XML ID。如果前面沒有同級元素,則為 NULL。
text ntext 包含文本形式的屬性值或元素內容。如果邊緣表項不需要值則為 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文檔的方法》,本文關鍵詞  使用,xml,preparedocument,處理,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用sp_xml_preparedocument處理XML文檔的方法》相關的同類信息!
  • 本頁收集關于使用sp_xml_preparedocument處理XML文檔的方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 鄢陵县| 宜昌市| 华池县| 宝丰县| 绵竹市| 仙居县| 驻马店市| 库车县| 清远市| 仙桃市| 拉孜县| 枞阳县| 双江| 克山县| 通州市| 水城县| 崇左市| 澄江县| 襄樊市| 漯河市| 江口县| 淄博市| 三江| 梧州市| 武汉市| 互助| 永顺县| 六枝特区| 仲巴县| 南宫市| 宿州市| 卫辉市| 乌审旗| 三原县| 河东区| 将乐县| 岫岩| 昭觉县| 宜阳县| 保靖县| 鸡泽县|