使用LinQ完全读取Xelement

时间:2010-06-09 09:08:48

标签: linq

我有一个解析xml后得到的XElement。只有在需要时才需要读取此XElement,因此我将其存储在列表中以备将来使用。

我必须使用Linq阅读此XElement。

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>

我的问题是我无法读取所有三个节点。我只能获得第一个节点。哪里出错了?

2 个答案:

答案 0 :(得分:0)

这应该起作用,即元素不是后代,并确保在选择新元素时,您正在选择一种对象。

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
                  };

答案 1 :(得分: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)
}