2010-06-09 66 views
0

我有一個解析XML後得到的XElement。此XElement只有在需要時才需要閱讀,因此我已將它存儲在列表中供將來使用。我不得不使用Linq來讀這個XElement。完全使用LinQ閱讀Xlement

XDocument doc = XDocument.Parse(DataManager.offeringElements[index].DataElem.ToString()); 

     var docNode = from dataNode in doc.Descendants("DataLinks") 
         select new 
         { 
          Offering = dataNode .Element("link").Value, 
          linkUrl = dataNode.Element("link").Attribue("href").Value 
         }; 

中的XElement具有以下節點

<DataLinks> 
     <link href="">a. Management</link> 
     <link href="">b. Analytics</link> 
     <link href="">c. Development</link> 
    </DataLinks> 

我的問題是,我不能夠讀取所有三個nodes.I我就能得到的只有第一個節點。哪裏出問題了?

回答

0

這應該工作,即Elemenets不是後代,並確保選擇新的時候,你選擇的是一種物體。

public class ObjectType 
{ 
    public Offering {get; set;} 
    public linkUrl {get; set;} 
} 



var docNode = from dataNode in doc.Elemenets ("DataLinks") 
        select new ObjectType 
        { 
         Offering = dataNode .Element("link").Value, 
         linkUrl = dataNode.Element("link").Attribue("href").Value 
        }; 
0

我會這樣做。恕我直言,方法語法看起來更乾淨,然後查詢語法。請注意,這是未經測試的代碼。

IEnumerable<XElement> seqLinks = doc.Descendants("DataLinks").Single() 
    .Descendants("link"); 

foreach(XElement link in seqLinks) 
{ 
    Console.WriteLine("Value is {0}, and href is {1}", 
     link.Value, link.Attribute("href").Value) 
}