在LinqToXml查询中迭代

时间:2013-03-26 12:05:29

标签: c# xpath linq-to-xml xquery

由于我还没有使用LinqToXml,我想请求你帮助

源XML:

<Projects xmlns="">
   <Project id="12345">
     <Name>AName</Name>
   </Project>
   <Project id="23456">
     <Name>BName</Name>
   </Project>
</Projects>

Linq查询:

var q = (from xe in datasource.Descendants()
                 select new Data{ 
                                  ID = xe.Name.ToString(), 
                                  Name = xe.Value.ToString() 
                                }).ToList();

输出:

Project AName 
Name AName 
Project BName 
Name BName 

期望的输出:

12345 AName
23456 BName

所以看起来查询正在迭代所有后代,并将Name作为节点名称,Value作为节点值。我应该如何修改它以获得所需的输出? 这样的事情怎么样:

  • 获取所有<Name>个节点进行迭代

  • 选择该节点的Value和祖先的id属性

P.S。您是否推荐LinqToXml的任何特定教程?

1 个答案:

答案 0 :(得分:1)

var q = (from p in datasource.Descendants("Project")
         select new Data { 
               ID = (string)p.Attribute("id"), 
               Name = (string)p.Element("Name") 
         }).ToList();

还要考虑具有整数类型的ID属性,然后您将能够以这种方式解析它:

ID = (int)p.Attribute("id")

您也可以使用方法(流利)语法:

var q = datasource
          .Descendants("Project")
          .Select(p => new Data { 
               ID = (string)p.Attribute("id"), 
               Name = (string)p.Element("Name") })
          .ToList();