1. 程式人生 > >C#程序中使用LINQ to XML來查詢XML格式數據的實例

C#程序中使用LINQ to XML來查詢XML格式數據的實例

add pri esp 這一 toolbar eve read 創建 lai

LINQ to XML 是一種啟用了 LINQ 的內存 XML 編程接口,使用它,可以在 .NET Framework 編程語言中處理 XML。
它將 XML 文檔置於內存中,這一點很像文檔對象模型 (DOM)。 您可以查詢和修改 XML 文檔,修改之後,可以將其另存為文件,也可以將其序列化然後通過網絡發送。 但是,LINQ to XML 與 DOM 不同: 它提供一種新的對象模型,這是一種更輕量的模型,使用也更方便,這種模型利用了 VisualC# 2008 在語言方面的改進。
LINQ to XML 最重要的優勢是它與 Language-Integrated Query (LINQ) 的集成。 由於實現了這一集成,因此,可以對內存 XML 文檔編寫查詢,以檢索元素和屬性的集合。 LINQ to XML 的查詢功能在功能上(盡管不是在語法上)與 XPath 和 XQuery 具有可比性。 Visual C# 2008 集成 LINQ 後,可提供更強的類型化功能、編譯時檢查和改進的調試器支持。
通過將查詢結果用作 XElement 和 XAttribute 對象構造函數的參數,實現了一種功能強大的創建 XML 樹的方法。 這種方法稱為“函數構造”,利用這種方法,開發人員可以方便地將 XML 樹從一種形狀轉換為另一種形狀。
LINQ to XML 提供了改進的 XML 編程接口,這一點可能與 LINQ to XML 的 LINQ 功能同樣重要。 通過 LINQ to XML,對 XML 編程時,您可以實現任何預期的操作,包括:

  • 從文件或流加載 XML。
  • 將 XML 序列化為文件或流。
  • 使用函數構造從頭開始創建 XML。
  • 使用類似 XPath 的軸查詢 XML。
  • 使用 Add、Remove、ReplaceWith 和 SetValue 等方法對內存 XML 樹進行操作。
  • 使用 XSD 驗證 XML 樹。

使用這些功能的組合,可將 XML 樹從一種形狀轉換為另一種形狀。

實例
在前一段時間開發的護士站項目中,我是for循環XMLReader的方式遍歷XML文件的。也能完成相關的需求,且函數封裝好了以後,可以直接調用,也挺方便。

下面用LINQ to XML來展現。具體更詳細的東西可以去查MSND。

客戶端的XML文件如下,為了展現方便我只取了3項:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <?xml version="1.0"?> <ROWSET> <ROW> <就診序號>1</就診序號> <就診日期>2012-06-11</就診日期> <病人ID>00002468</病人ID> <姓名>吳建平</姓名> <性別>男</性別> <年齡>42</年齡>
<就診科室>2981</就診科室> </ROW> <ROW> <就診序號>2</就診序號> <就診日期>2012-06-11</就診日期> <病人ID>00002467</病人ID> <姓名>蔡蕊</姓名> <性別>女</性別> <年齡>33</年齡> <就診科室>2981</就診科室> </ROW> <ROW> <就診序號>3</就診序號> <就診日期>2012-06-11</就診日期> <病人ID>412905</病人ID> <姓名>aaa</姓名> <性別>男</性別> <年齡>24</年齡> <就診科室>2981</就診科室> </ROW> </ROWSET>

怎麽展現呢?關註Form1_Load方法如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 using System; using System.Linq; using System.Windows.Forms; using System.Xml.Linq; namespace Lint2XMLDatabinding { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string xmlFilePath = @"./當前在科病人基本信息.xml"; XDocument doc = XDocument.Load(xmlFilePath); var query = from p in doc.Descendants("ROW")//doc.Descendants("ROW") where p.Element("就診序號").Value!="1" select new { A = p.Element("就診序號").Value, B = p.Element("病人ID").Value, C = p.Element("姓名").Value ,D=p.Element("性別").Value }; dataGridView1.DataSource= query.ToList(); } } }

程序結果如下:

技術分享圖片

本篇博文用來示例的Demo很簡單,目的單純為了使用LINQ。操作XML文件的方法有很多,不用LINQ當然也沒什麽問題。

其實,迄今為止,.NET Framework一共提供了兩套處理XML數據的類庫:

一、即DebugLZQ前面項目裏用的的符合DOM標準的類庫:寶庫XmlDocument、XmlElement、XmlNode、XmlAttribute等類。這套類庫的特點是中規中矩、功能強大,但也背負了太多XML的傳統和復雜。

二、以LINQ為基礎的類庫:包括XDocument、XElement、XNode、XAttribute等類。這套類庫的特點是可以使用LINQ進行查詢和操作,方便快捷。

C#程序中使用LINQ to XML來查詢XML格式數據的實例