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

时间:2011-02-16 03:19:26

标签: c# xml silverlight linq visual-studio-2010

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

<root>
      <element>TextHere</element>
      <element>TextHere</element>
      <element>TextHere</element>
</root>

这是我目前的代码。

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

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

2 个答案:

答案 0 :(得分:5)

这样就可以了:

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

或者用点符号简洁一点:

var ElementsList = xmlDoc.Descendants("element")
                         .Select(x => new { ElementContent = x.Value });

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

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

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

var ElementsList = xmlDoc.Descendants("element")
                         .Select(x => x.Value)
                         .ToList();

答案 1 :(得分:2)

这样做 -

 XDocument xmlDoc = XDocument.Load("XMLDocument.xml");
 var ElementsList = from Elements in xmlDoc.Descendants("root")
 select new
 {
   Element1 = (string)Elements.Element("element"),
   Element2 = Elements.Element("element").ElementsAfterSelf("element").First().Value,
   Element3 = Elements.Element("element").ElementsAfterSelf("element").ElementAt(1).Value,
 };