婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫(kù) > 使用sp_xml_preparedocument處理XML文檔的方法

使用sp_xml_preparedocument處理XML文檔的方法

熱門標(biāo)簽:數(shù)字匠心電銷機(jī)器人 沒聽見電話機(jī)器人幫你接 蘭州語音外呼系統(tǒng)運(yùn)營(yíng)商 陜西電銷外呼系統(tǒng)好用嗎 al智能電話機(jī)器人 成都電話外呼系統(tǒng)一般多少錢 銀川高頻外呼回?fù)芟到y(tǒng)多少錢 如何做地圖標(biāo)注圖鋪 最新人工智能電銷機(jī)器人

有時(shí)會(huì)在存儲(chǔ)過程中處理一些XML格式的數(shù)據(jù),所以會(huì)用到sp_xml_preparedocument,他可以將XML數(shù)據(jù)進(jìn)行讀取,然后使用 MSXML 分析器 (Msxmlsql.dll) 對(duì)其進(jìn)行分析。我們就可以很容易的在存儲(chǔ)過程中得到XML中我們想要的數(shù)據(jù)。下面的代碼就是使用sp_xml_preparedocument讀取XML:

復(fù)制代碼 代碼如下:

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數(shù)據(jù)還需要使用OPENXML,代碼如下:
復(fù)制代碼 代碼如下:

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

OPENXML有三個(gè)參數(shù):
第一個(gè)是sp_xml_preparedocument讀取是的OUTPUT參數(shù),在本示例中就是@hdoc;
第二個(gè)是一個(gè)XPath表達(dá)式,用來獲取指定位置的數(shù)據(jù);
第三個(gè)是一個(gè)可選項(xiàng),用來表示獲取的方式,有0,1,2,8四種取值,詳細(xì)解釋請(qǐng)看
FROM后面的WITH也是可選的,用來指定獲取哪些數(shù)據(jù)字段,上面代碼中只取了CustomerID和ContactName。上面的查詢結(jié)果如下:
CustomerID ContactName
—————————————- —————————————-
VINET Paul Henriot
LILAS Carlos Gonzlez
如果不指定WITH子句,查詢出來的是一個(gè)默認(rèn)的表結(jié)構(gòu),如下:


表格列的解釋說明:

列名 數(shù)據(jù)類型 說明
id bigint 文檔節(jié)點(diǎn)的唯一 ID。

根元素的 ID 值為 0。保留負(fù) ID 值。

parentid bigint 標(biāo)識(shí)節(jié)點(diǎn)的父節(jié)點(diǎn)。此 ID 標(biāo)識(shí)的父節(jié)點(diǎn)不一定是父元素。具體情況取決于此 ID 所標(biāo)識(shí)節(jié)點(diǎn)的子節(jié)點(diǎn)的節(jié)點(diǎn)類型。例如,如果節(jié)點(diǎn)為文本節(jié)點(diǎn),則其父節(jié)點(diǎn)可能是一個(gè)屬性節(jié)點(diǎn)。

如果節(jié)點(diǎn)位于 XML 文檔的頂層,則其 ParentID 為 NULL。

節(jié)點(diǎn)類型 int 標(biāo)識(shí)節(jié)點(diǎn)類型,是對(duì)應(yīng)于 XML 對(duì)象模型 (DOM) 節(jié)點(diǎn)類型編號(hào)的一個(gè)整數(shù)。

下列值是可以顯示在此列中以指明節(jié)點(diǎn)類型的值:

1 = 元素節(jié)點(diǎn)

2 = 屬性節(jié)點(diǎn)

3 = 文本節(jié)點(diǎn)

4 = CDATA 部分節(jié)點(diǎn)

5 = 實(shí)體引用節(jié)點(diǎn)

6 = 實(shí)體節(jié)點(diǎn)

7 = 處理指令節(jié)點(diǎn)

8 = 注釋節(jié)點(diǎn)

9 = 文檔節(jié)點(diǎn)

10 = 文檔類型節(jié)點(diǎn)

11 = 文檔片段節(jié)點(diǎn)

12 = 表示法節(jié)點(diǎn)

有關(guān)詳細(xì)信息,請(qǐng)參閱 Microsoft XML (MSXML) SDK 中的“節(jié)點(diǎn)類型屬性”主題。

localname nvarchar(max) 提供元素或?qū)傩缘谋镜孛Q。如果 DOM 對(duì)象沒有名稱,則為 NULL。
prefix nvarchar(max) 節(jié)點(diǎn)名稱的命名空間前綴。
namespaceuri nvarchar(max) 節(jié)點(diǎn)的命名空間 URI。如果值是 NULL,則命名空間不存在。
datatype nvarchar(max) 元素或?qū)傩孕械膶?shí)際數(shù)據(jù)類型,否則是 NULL。數(shù)據(jù)類型是從內(nèi)聯(lián) DTD 中或從內(nèi)聯(lián)架構(gòu)中推斷得出。
prev bigint 前一個(gè)同級(jí)元素的 XML ID。如果前面沒有同級(jí)元素,則為 NULL。
text ntext 包含文本形式的屬性值或元素內(nèi)容。如果邊緣表項(xiàng)不需要值則為 NULL。

在WITH子句中,我們還可以通過設(shè)置來獲取父級(jí)元素的屬性值:

復(fù)制代碼 代碼如下:

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')

查詢的結(jié)果為:
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
有時(shí)候XML中的數(shù)據(jù)并不是以屬性的方式存在,而是直接放在節(jié)點(diǎn)中,如下:
復(fù)制代碼 代碼如下:

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>'

此時(shí)要獲Order節(jié)點(diǎn)下的各項(xiàng)的值,可以用下面方法:
復(fù)制代碼 代碼如下:

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')

查詢結(jié)果如下:
OrderID CustomerID EmployeeID OrderDate
———– ———- ———– ———————–
10248 VINET 5 1996-07-04 00:00:00.000
可以看出是取屬性值還是取節(jié)點(diǎn)的文本的值區(qū)別在于WITH子句的第三個(gè)參數(shù)是否有@符號(hào)

標(biāo)簽:邢臺(tái) 本溪 朔州 宜春 遼源 通化 鹽城 巴彥淖爾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用sp_xml_preparedocument處理XML文檔的方法》,本文關(guān)鍵詞  使用,xml,preparedocument,處理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用sp_xml_preparedocument處理XML文檔的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于使用sp_xml_preparedocument處理XML文檔的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 台湾省| 清水河县| 吉安县| 宜章县| 英德市| 昭苏县| 杭锦旗| 吉林市| 噶尔县| 河东区| 台北县| 淮南市| 巴青县| 兴宁市| 安泽县| 青田县| 巧家县| 漳州市| 阿拉善盟| 鄂伦春自治旗| 澄城县| 福清市| 会宁县| 淮滨县| 同江市| 都匀市| 澎湖县| 苏尼特右旗| 全州县| 巴青县| 奈曼旗| 天等县| 历史| 汝城县| 道真| 衡南县| 临沭县| 南岸区| 蒙山县| 通州区| 潼关县|