DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 應用XML架構文件
應用XML架構文件
編輯:XML詳解     
工作上,有時會遇到系統間數據交互的問題。之前我做過的方法是,源系統將數據導出為文本文件(TXT後綴),然後上傳到目標系統,分析、讀取。現在好一點,應用web service,編寫一個數據接口,在程序裡直接調用,而無須再經過人工上傳一道工序。並且web service傳送的數據,全部是XML格式,可以很方便的讀取,不必再自己寫分析算法。當然,也因為是XML格式,每個字段值前後各一個標記,並且是明文,如果記錄很多,可能需要傳送的數據量就比較大了,這可能是不夠好的地方。

  由於XML文件只存儲數據,並無數據類型描述,因此從XML文件讀入數據可能會出現數據類型與原先不符的情況。比如,有一表employee,結構如下:ID(INT),NAME(varchar(50)),在XML裡表示為<EMPLOYEE><ID>1</ID><NAME>張三</NAME></EMPLOYEE>。這樣,ID的類型原本為整型,而此時系統卻以為是字符型!

  因為這個情況我們遇到了點問題。

  數據導入的時候,往往要加以分析,將導入的數據和現有數據比較,以確定是插入、更新還是刪除。比較的算法,最簡單當然是將兩個數據集(DataSet)來個嵌套循環,逐條記錄比較。不過這種方法效率不高,可以改進一下,將兩個數據集排好序,然後再來比較。

  怎樣排序呢?從XML文件裡讀取數據,存放在數據集dsXML裡,而現有數據,存放在數據集dsCur裡,每個數據集裡都只有一個DataTable。可以用DataTable的Select方法來實現排序,方法如下:

//從XML文件裡讀取數據

DataSet dsXml = new DataSet(“dsXML”);

DsXml.ReadXml(“employee.XML”);

//從現有數據庫中讀取數據。GetData是自定義的函數,從現有數據庫中提取數據

DataSet dsCur = GetData();

//按照id的順序排序。

//其中Select第一個參數是過濾條件,這裡為空表示所有記錄都適合;第二個參數表示排序字段

DataRow[] drsXml = dsXML.Tables[0].Select(“”,”id”);

DataRow[] drsCur = dsCur.Tables[0].Select(“”,”id”);

  然後比較這兩個記錄集:drsXML與drsCur。

但是運行的結果卻跟原先設想大相徑庭。

  什麼原因呢?

  原來就是因為在dsXml裡,字段id是字符型。字符型排序不同於數值排序,如果讓系統比較,”9”肯定大於”10”。因此,dsXML的排序沒有得到我們預期的效果。

  看來要讓系統知道id是整型。如何能做到?可以結合XML架構文件。

   dsXml.ReadXMLSchema("employee.xsd");

   dsXml.ReadXml(“employee.xml”,XMLReadMode.InferSchema);

  這樣子讀出來後,數據結構就跟架構文件employee.xsd裡描述的一模一樣了。

  補充一點,本人對架構文件語法不熟悉,是先用從數據庫中拿到的數據集dsCur輸出來,然後再稍作修改:

dsCur. WriteXMLSchema(“employee.xsd”); 

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved