用OPEN函式將XML資料轉為關聯資料

2021-04-17 02:51:13 字數 1706 閱讀 6781

2005中進一步延續了對xml的支援。本文將向我們展示如何用sqlserver提供的open

xml函式將

xml型別資料轉換為其它格式的關聯資料。

從sqlserver2000開始,微軟開始支援xml型別的資料。在sqlserver2005中,微軟延續了這一特性,並加強了對xml資料列、xml變數以及xml索引的支援。

在中儲存xml資料是乙個很出色的特徵。對於大部分的資料處理需求來講,將xml資料格式化為其它關聯資料是十分重要。這也是引入open

xml函式的原因。open

xml是乙個sqlserver提供的函式,它的作用是接收xml資料,提供記憶體中xml資料的行集檢視。

乙個open

xml函式用例

在下面的例子中,我們將演示如何使用open

xml函式。假定我們現在正在從事乙個網上購物系統開發。在這個場景中,顧客選擇登入方式購買多種產品。因為根據公司的商業模式,通過**購物能夠節省成本。我們假定大部分的顧客都購買了七件或者更多的商品。我們的目標是當客戶頻繁的訪問**的時候,要儘量減少資料庫的呼叫。我們的想法是將網頁上提交的採購需求儲存為xml文件,並且將其中的xml資料以字串的形式傳送給資料庫底層的程式處理。這樣,我們就可以在一次資料庫呼叫中將xml資料中的訂單資訊插入資料庫中。

我們該如何解決上面的問題呢?首先我們看看將要編輯的網頁資料。乙個簡單的xml文件含有來自**的很多核心資訊,包括:產品名稱、**、日期以及顧客資料。列表a包含了乙個簡單的xml資料流。

然後,我們需要乙個網頁介面提供儲存程式的呼叫。通過呼叫這一儲存程式,將xml資料流儲存至資料庫。列表b是這一儲存程式的實現內容。

這一儲存程式支援xml資料型別(sqlserver2005中新特色)作為輸入引數(我們也可以使用變數字元資料型別作為我們的輸入引數,例如varchar(max)或者定義varchar資料型別)。

接下來,我們呼叫系統程式sp_xml_preparedocument,它不僅建立了xml文件在記憶體中的表示,也允許xml文件作為呼叫引數。一旦我們擁有了指向記憶體中xml文件的控制代碼,就可以呼叫open

xml函式。在函式呼叫中使用不同的引數,還可以對xml資料的返回結果集進行詳細的控制。

我們提供指向xml文件的控制代碼,並且通過xpath查詢返回想要的xml資料中的節點。open

xml函式中的with子句允許指定返回資料的行集格式。一旦將資料插入到websales**中,就可以呼叫系統程式sp_xml_removedocument刪除sqlserver伺服器記憶體中的xml資料。

這個簡單的例子演示了通過open

xml函式來減少資料庫呼叫次數的強大功能。open

xml函式提供很大的靈活性,你既可以將所有的xml資料插入到sqlserver資料表中,也可以拆分xml檔案,將其插入到不同的sqlserver資料表中。通過這一技術,我們就可以在一次程式呼叫中插入8條記錄,而不是像傳統的技術那樣,要通過8次操作實現。

open

xml的侷限性

呼叫open

xml函式時要注意記憶體的使用情況。系統程式sp_xml_preparedocument的返回值是指向記憶體中xml文件的控制代碼。所以,你最好不要使用open

xml載入較大的xml文件,因為那樣可能會造成伺服器的記憶體溢位。

在以後的文章中,我將會向你介紹如何使用sqlserver2005提供的關於xml的一些新屬性,這些新屬性不僅能夠實現open

xml函式的功能,而且不需要考慮open

xml呼叫時產生的記憶體操作問題。

將XML轉為陣列結構的函式

此方法要求傳入乙個節點 domnode 返回該節點下的所以子節點組成的陣列。比如乙個xml檔案 file1.txt 2009 09 07 2009 09 08 file2.txt 2009 09 01 2009 09 04 file3.txt 2009 09 01 2009 09 02 2009 0...

將CSV轉為XML的指令碼

1.csv是定義的比較簡單的 檔案格式,類似excel但是比它簡單 用文字編輯器開啟csv檔案,你可以看到 實際上基本都是用 來分割各個欄位的資料,如下 a,32,0,1,通訊站,交換機房.東門門磁 a,32,1,1,通訊站,交換機房.西門門磁 a,32,2,0,通訊站,交換機房.交流屏故障 a,3...

將CAD資料轉為shp

最近在做乙個有關地下管道的建模與分析的專案,將有關軟體之間的的資料轉換與後期處理說一下。首先,因為地下管道是源資料是cad圖,這個在工程專案中很常見的,因為大多數情況下測量資料都是使用全站儀 gps測得的,尤其是地下管道,在測量時還會用到管道探測儀 gps的rtk技術,這些測量資料在內業展點 放樣等...