【问题标题】:Xml file reading using XML to LINQ in C#在 C# 中使用 XML to LINQ 读取 XML 文件
【发布时间】:2010-06-29 16:05:50
【问题描述】:

我有一个 xml 文件 (Sample.xml),它具有以下结构

<RootElement> 
 <Children> 
    <Child Name="FirstChild" Start="0" End="2"> 
      <Sibling Name="Test1" /> 
      <Sibling Name="Test2" /> 
      <AdditionalSibling Name="Add_Test_1" /> 
      <AdditionalSibling Name="Add_Test_2" /> 
      <MissingSibling Name="Miss_Test_1" /> 
      <MissingSibling Name="Miss_Test_2" / 
 </Child> 

 <Child Name="SecondChild" Start="0" End="2"> 
      <Sibling Name="Test3" /> 
      <Sibling Name="Test4" /> 
 </Child> 
 <Child Name="ThirdChild" Start="0" End="2"> 
      <Sibling Name="Test5" /> 
      <Sibling Name="Test6" /> 
  </Child> 
  <Child Name="FourthChild" Start="0" End="2"> 
      <Sibling Name="Test7" /> 
      <Sibling Name="Test8" /> 
  </Child> 
  <Child Name="FifthChild" Start="0" End="2"> 
      <Sibling Name="Test9" /> 
      <Sibling Name="Test10" /> 
  </Child> 
  <Child Name="SixthChild" Start="0" End="2"> 
      <Sibling Name="Test11" /> 
      <Sibling Name="Test12" /> 
  </Child> 

  <MatchedChilds> 
     <Child Name="FirstChild" /> 
     <Child Name="SecondChild" /> 
     <Child Name="ThirdChild" /> 
     <Child Name="FourthChild" /> 
     <Child Name="FifthChild" /> 
     <Child Name="SixthChild" />  
  </MatchedChilds> 
 </Children> 
</RootElement> 

我需要读取直接在“RootElement”下的元素“Child”的属性值

现在我正在使用类似的 LINQ 查询

          List<string> lst = (from element in XDocument.Load(Application.StartupPath + "\\Sample.xml")
                                                       .Descendants("Child")
                                                        group element by element.Attribute("Name").Value into KeyGroup select KeyGroup.Key )
                                                       .ToList();

但它返回文件中所有“Child”元素的“Name”属性值。

请给我一个更好的解决方案来使用 XML to LINQ 来做到这一点

提前致谢

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    使用这样的东西:

    XDocument doc = XDocument.Load(Application.StartupPath + "\\Sample.xml");
    List<string> lst = doc.Root.Elements("Child")
                          .Select(x => (string) x.Attribute("Name"))
                          .ToList();
    

    注意使用Elements() 而不是Descendants()。这将为您提供所有名称属性。我不清楚您为什么在原始示例代码中进行分组,但希望这会让您继续前进。

    【讨论】:

      【解决方案2】:

      按姓名分组,因此您的列表将包含姓名元素。您可以按如下方式查询和迭代您的结果:

      var query = from element in XDocument.Load(Application.StartupPath + "\\Sample.xml")
          .Descendants("Child")
          group element by element.Attribute("Name").Value into KeyGroup 
          select new { Grouping = KeyGroup.Key, Children = KeyGroup };
      

      和迭代

      foreach(var namekey in query)
      {
          Console.WriteLine(namekey.Grouping);
          foreach(var child in namekey.Children)
          {
              Console.WriteLine(child.whatever);
          }
      }
      

      【讨论】:

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