使用LINQ读取XML数据,具有相同名称的多个元素

BCX*_*eme 1 c# xml linq silverlight visual-studio-2010

Visual Studio 2010,Silverlight 4和C#.我将以下数据存储在XML文件中:

<root>
      <element>TextHere</element>
      <element>TextHere</element>
      <element>TextHere</element>
</root>
Run Code Online (Sandbox Code Playgroud)

这是我目前的代码.

XDocument xmlDoc = XDocument.Load("XMLDocument.xml");
var ElementsList = from Elements in xmlDoc.Descendants("root")
                   select new
                   {
                       ElementContent = Elements.Element("Element").Value,
                   };
Run Code Online (Sandbox Code Playgroud)

此代码仅将第一个元素放在列表中,而将所有其他元素保留在列表中.如何重写此代码以便它将捕获XML文件中名为"element"的所有元素?

Bro*_*ass 5

这样做:

XDocument xmlDoc = XDocument.Load("XMLDocument.xml");
var ElementsList = from Elements in xmlDoc.Descendants("element")
                   select new
                   {
                       ElementContent = Elements.Value
                   };
Run Code Online (Sandbox Code Playgroud)

或者用点符号简洁一点:

var ElementsList = xmlDoc.Descendants("element")
                         .Select(x => new { ElementContent = x.Value });
Run Code Online (Sandbox Code Playgroud)

但是请注意,在此之后您只有一个元素的枚举,如果您想要一个列表(如您的变量名所示),您可以.ToList()在选择后添加一个:

var ElementsList = xmlDoc.Descendants("element")
                         .Select(x => new { ElementContent = x.Value })
                         .ToList();
Run Code Online (Sandbox Code Playgroud)

这个列表将包含具有ElementContent属性的匿名类型的3个元素(基于您的示例XML.).如果你不需要那个属性(我认为你不需要),这是一个只返回字符串列表的简化版本:

var ElementsList = xmlDoc.Descendants("element")
                         .Select(x => x.Value)
                         .ToList();
Run Code Online (Sandbox Code Playgroud)