在SQLServer中用XQuery分解XML數(shù)據(jù)_Xml教程
推薦:用MySQL和PHP創(chuàng)建XMLXML是作為數(shù)據(jù)交換標(biāo)準(zhǔn)而出現(xiàn)的。Java和.NET都內(nèi)在支持XML,但是其它平臺(tái)上的開(kāi)發(fā)者也不用擔(dān)心自己被這項(xiàng)技術(shù)所遺棄了。PHP就是一個(gè)頗受歡迎的支持XML的腳本環(huán)境。 在本文中,我將向你介紹利
在舉例說(shuō)明如何分解上一篇文章中的數(shù)據(jù)時(shí),我們首先了解一下XQuery和它在SQL Server 2005中為開(kāi)發(fā)者提供的功能。
XQuery介紹
XQuery,也稱作XML Query,是一種查詢XML數(shù)據(jù)的語(yǔ)言,允許你提取所需的節(jié)點(diǎn)和元素。它由W3C定義,可用于今天的大多數(shù)主流數(shù)據(jù)庫(kù)引擎中,如Oracle、DB2和SQL Server。
SQL Server 2005 XQuery函數(shù)
下面的四個(gè)函數(shù)是SQL Server 2005中的XQuery函數(shù)。(注意,XML、XQuery語(yǔ)句和下面的函數(shù)都區(qū)分大小寫(xiě)。例如,SQL編譯器接受XML數(shù)據(jù)中的.exist,但拒絕.EXIST或.Exist。)
xml.exist
這個(gè)方法根據(jù)一個(gè)XML節(jié)點(diǎn)上的搜索表達(dá)式返回一個(gè)布爾值。例如,列表A中XML代碼片段中的語(yǔ)句將返回1(真):
SELECT @x.exist('/christmaslist/person[@gift = "socks"]')
這個(gè)語(yǔ)句返回0(假):
SELECT @x. exist ('/christmaslist/zach')
由于“Socks”一詞被封套,這個(gè)語(yǔ)句將返回0(假)。
SELECT @x.exist('/christmaslist/person[@gift = "socks"]')
xml.value
這個(gè)方法接受一個(gè)XQuery語(yǔ)句并返回一個(gè)單獨(dú)值。使用列表A中同樣的XML代碼片段,不可以使用VALUE函數(shù)生成“betty”值,如下所示:
SELECT @x.value('/christmaslist[1]/person[1]/@name', 'VARCHAR(20)')
而XQuery生成“zach”值。
SELECT @x.value('/christmaslist[1]/person[2]/@name', 'VARCHAR(20)')
xml.query
這個(gè)方法接受一個(gè)XQuery并返回一個(gè)XML數(shù)據(jù)類型的實(shí)例�?梢园葱枰獙⑦@些查詢簡(jiǎn)單或復(fù)雜化,下面是一個(gè)簡(jiǎn)單的例子:
SELECT @x.query('/christmaslist/person')
它返回XML文件:
以下是引用片段:
<person name="betty" gift="camera" />
<person name="zach" gift="elmo doll" />
<person name="brad" gift="socks" />
xml.nodes
在你需要將一個(gè)XML數(shù)據(jù)類型變量中的數(shù)據(jù)分解到關(guān)系數(shù)據(jù)中時(shí),這個(gè)方法十分有用。這個(gè)方法接受一個(gè)XQuery語(yǔ)句作為參數(shù),并返回一個(gè)包含XML變量邏輯標(biāo)量數(shù)據(jù)的行集。列表B中的查詢利用上面定義的XML變量,并將數(shù)據(jù)分解到一個(gè)結(jié)果集中,它顯示在XML變量中定義的人物姓名。
修改OPENXML存儲(chǔ)過(guò)程
現(xiàn)在我來(lái)說(shuō)明如何修改上周的OPENXML存儲(chǔ)過(guò)程,使其可以應(yīng)用XQuery功能。首先,我往XML變量中加載一些數(shù)據(jù)。如列表C所示。我們可以建立一個(gè)接受XML參數(shù)的過(guò)程,再應(yīng)用XQuery函數(shù)把XML文件中的數(shù)據(jù)插入一個(gè)表中,而不必應(yīng)用OPENXML。如列表D所示。
最初在數(shù)據(jù)庫(kù)中應(yīng)用XML似乎有些難于處理,還要花一些時(shí)間習(xí)慣使用XQuery和Xpath查詢。但是,經(jīng)過(guò)一段時(shí)間的學(xué)習(xí)以后,你就會(huì)發(fā)現(xiàn)在數(shù)據(jù)庫(kù)中應(yīng)用XML數(shù)據(jù)相當(dāng)實(shí)用。
例如,在上述存儲(chǔ)過(guò)程中應(yīng)用XML數(shù)據(jù),你只需調(diào)用一次數(shù)據(jù)庫(kù),而不必像典型存儲(chǔ)過(guò)程編程那樣調(diào)用N次數(shù)據(jù)庫(kù)。這二者似乎區(qū)別不大,但對(duì)一個(gè)繁忙的系統(tǒng)而言,應(yīng)用XML數(shù)據(jù)會(huì)有很大益處。而且,應(yīng)用XQuery而非OPENXML還會(huì)顯著提高性能,對(duì)小型XML文件更是如此。
分享:AJAX基礎(chǔ)教程及初步使用什么是 AJAX? AJAX (異步 JavaScript 和 XML) 是個(gè)新產(chǎn)生的術(shù)語(yǔ),專為描述JavaScript的兩項(xiàng)強(qiáng)大性能.這兩項(xiàng)性能在多年來(lái)一直被網(wǎng)絡(luò)開(kāi)發(fā)者所忽略,直到最近Gmail,Google suggest和google Map
- xml創(chuàng)建節(jié)點(diǎn)(根節(jié)點(diǎn)、子節(jié)點(diǎn))
- WML開(kāi)發(fā)教程之 WAP網(wǎng)站服務(wù)器配置方法
- WMLScript的語(yǔ)法基礎(chǔ)
- 收集的WML Script標(biāo)準(zhǔn)函數(shù)庫(kù)
- WML教程之文本框控件Input
- 無(wú)線標(biāo)記語(yǔ)言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)
- xml文件的結(jié)構(gòu)解讀
- 關(guān)于XSL - XSL教程
- 選擇模式 - XSL教程 - 2
- XPath入門(mén) - XSL教程 - 3
- 匹配模式 - XSL教程 - 4
- 測(cè)試模式 - XSL教程 - 5
- 相關(guān)鏈接:
- 教程說(shuō)明:
Xml教程-在SQLServer中用XQuery分解XML數(shù)據(jù)
。