使用LINQ to XML來查詢XML

2022-03-04 05:33:50 字數 2027 閱讀 6321

用於xml的語言整合查詢(linq to xml)允許使用標準查詢操作符就像樹形操作符一樣來查詢xml資料,它能夠提供類似xpath的導航在後代、祖先和兄弟的xml元素中導航。它簡化了對xml資料的使用,不必使用額外的語言語法像xpath或xquery。你可以使用linq to xml對你從檔案系統、從乙個遠端web service或從乙個記憶體中的xml內容中獲得的xml執行linq查詢。這篇文章將只關注於使用linq從乙個xml檔案——customers.xml檔案查詢xml。

建立乙個簡單的linq專案

我們將命名我們的visual studio專案為consolelinqtoxml,並使用c#語言。使用using 指令新增下面的命名空間。system.xml.linq命名空間包含linq to xml所用到的類。

//include the linq to xml namespaces

using

system.xml; 

//namespace to deal with xml documents

using

system.xml.linq; 

//namespace to deal with linq to xml classes

接下來,我們將在我們的專案中新增customers.xml檔案。你也可以選擇將這個xml檔案儲存在你的檔案系統中的乙個目錄下,但是為了簡單起見,我們將只把它包含進我們的專案。在visual studio中點選project選單並選擇add existing item...。

圖1選擇customers.xml檔案並點選add。這個xml檔案將被新增到你的專案中。

圖2從solutions explorer右鍵單擊檔案customers.xml並選擇properties。這將顯示properties視窗。

圖3在customers.xml檔案的properties視窗中,點選copy to output directory選項並從下拉列表框中選擇copy always。

圖4現在我們開始編寫linq查詢來讀取我們的xml檔案。首先在static void main(string args)中編寫一些**。

// create the query

var custs = from c in xelement.load("customers.xml").elements("customers")

select c ;

// execute the query

foreach (var customer in custs)

console.readline();

你將注意到它是使用xelement類來顯示xml元素。xelement類的load方法很簡單地將customers.xml檔案載入到xelement類中去。elements方法返回xml文件中這個元素——customers元素——的乙個過濾的子元素集合。這只是顯示了linq是多麼強大,因為你對集合使用相同的語言查詢構造而現在是對xml文件。你甚至可以執行排序、過濾和分組如同你平常在linq中所做的。你可以插入乙個where條件從句到上面的查詢中來過濾你的結果。

where c.element("country").value == "italy"
當你在visual studio中執行你的專案時,你的輸出將看起來如下所示。你可以點選f5或點選visual studio中的debug - start debugging來執行。

圖5不使用linq來做相同的事情是要複雜得多,因為你仍然需要在節點間搜尋以訪問這些元素和它們的值。

使用Linq to XML遍歷XML

using system using system.xml.linq using system.linq namespace class program console.writeline console.writeline 使用xelement遍歷 foreach xelement e inxel...

使用Linq to XML操作XML的屬性

using system using system.xml.linq using system.linq namespace class program console.writeline console.writeline 使用linq遍歷某個元素的屬性 var query xel.element...

使用ndk stack來查詢崩潰

logcat報錯 fatal signal 6 sigabrt at 0x000025c9 code 6 thread 9703 thread 1277 都是一些暫存器以及函式位址,真不知道怎麼找具體哪個函式出錯了,這個時候使用ndk stack這個工具,ndk stack需要log作為輸入來分析 ...