【问题标题】:Reading XML data using LINQ, multiple elements with the same name使用LINQ读取XML数据,具有相同名称的多个元素
【发布时间】:2011-02-16 03:19:25
【问题描述】:

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”的所有元素?

【问题讨论】:

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


    【解决方案1】:

    这样就可以了:

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

    但是请注意,在此之后您只有一个元素枚举,如果您想要一个列表(正如您的变量名称所暗示的那样),您可以在 Select 之后添加 .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();
    

    【讨论】:

    • 嗯,它成功地拉入了所有元素,但是它将它们全部放在一个字符串中,没有明显的分离方式。我需要每个元素的内容成为列表中的单独项目。这可能吗?
    • @BCXTreme 并非如此,每个元素的内容将是枚举中的单独条目,您可能只想要列表,我将其编辑。
    【解决方案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,
     };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多