2010-06-09 59 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) 
}