2010-11-19 72 views
2
<Results> 
    <ResultSet>"nothing special" Description="More of nothing" 
    <Results> 
     <Result> 
     <Body>Four in this group</Body> 
     <Body2>this is more stuff I want</Body2> 
     <Body3>This is interesting stuff I want</Body3> 
     <Body4>this is more stuff I want</Body4> 
     </Result> 
     <Result> 
     <Something1>Only 3 in the group</Something1> 
     <ID>this is more stuff I want</ID> 
     <Stuff>This is interesting stuff I want</Stuff> 
     </Result> 
     <Result> 
     <Tag1>Only 3 in the group</Tag1> 
     <Tag2>this is more stuff I want</Tag2> 
     <Tag3>This is interesting stuff I want</Tag3> 
     </Result> 
    </Results> 
    </ResultSet> 
</Results> 

我該如何使用Linq到XML來取出所有的<Result>塊?正如你可以看到每個塊可以有任何數量的元素,我不知道他們被稱爲什麼。我的最終目標是將這些塊封裝到對象中,然後再傳遞給我的應用程序。LINQ To XML - 如何查詢內部元素中的所有元素?

我遇到的問題是我不能讓每個組使用Linq分開打破。我能得到的最接近的結果是將所有<Result>組中的所有元素都歸爲一個大列表(使用後代)。

編輯:這是我用來恢復每個<Result>組中的所有內容的代碼。我無法弄清楚如何迭代這個查詢中的列表來分解名稱/值對。我不知道元素的名稱,所以我不能通過名稱來引用它們。最後,我只想每個<Result>中的每個元素的名稱/值對。

var query = from item in xml.Descendants("Result") 
       select item; 

任何幫助?

謝謝,斯科特

+0

'Descendants'不應返回 「內部」 的事情'結果'元素。它應該返回一系列Result元素,這顯然是你需要的。 「Descendants」不適用什麼? – 2010-11-19 05:11:36

+0

我剛更新了帖子以顯示我正在使用的代碼以及我正在嘗試執行的操作。 – Scott 2010-11-19 05:44:52

回答

1

後人將抓住給定名稱的所有後代節點。如果您想具體說明,則需要逐個元素遍歷XML層次結構元素,例如xml.Element("ResultSet").Element("Results").Elements("Result")

這應該指向你在正確的方向:

var query = xml.Descendants("Result") 
       .Select(r => r.Elements() 
          .Select(e => new { Name = e.Name.LocalName, Value = e.Value })); 
foreach (var result in query) 
{ 
    foreach (var item in result) 
    { 
     Console.WriteLine("{0} : {1}", item.Name, item.Value); 
    } 
} 

或者,你可以使用SelectMany和扁平化的結果集:

var query = xml.Descendants("Result") 
       .SelectMany(r => r.Elements() 
           .Select(e => new { Name = e.Name.LocalName, Value = e.Value })); 
foreach (var item in query) 
{ 
    Console.WriteLine("{0} : {1}", item.Name, item.Value); 
} 
+0

你的第一個例子正是我正在尋找的。這保持名稱/值分組。第二個例子是我一直得到的。由於我不知道一個組的起始位置和另一個組的結束位置,因此它太平坦而無用。太棒了。謝謝! – Scott 2010-11-19 06:23:52