我有以下XML结构:
<row>
  <field name="Id">1</field>
  <field name="AreaId">1</field>
  <field name="Name">?"?</field>
</row>
<row>
  <field name="Id">2</field>
  <field name="AreaId">4</field>
  <field name="Name">???????</field>
</row>
我想name用Linq 迭代节点.我试过这个:
var items = (from i in doc.Descendants("row")
                     select new
                     {
                         Text = i.Value
                     }).ToList();
但它没有按照我需要的方式工作.有什么建议?
Meh*_*ari 16
var items = doc.Descendants("field")
               .Where(node => (string)node.Attribute("name") == "Name")
               .Select(node => node.Value.ToString())
               .ToList();
Ray*_*sen 11
首先,确保您的XML具有单个根节点:
<rows>
<row>
  <field name="Id">1</field>
  <field name="AreaId">1</field>
  <field name="Name">?"?</field>
</row>
<row>
  <field name="Id">2</field>
  <field name="AreaId">4</field>
  <field name="Name">???????</field>
</row>
</rows>
之后,您可以使用以下代码加载xml:
string xml = //Get your XML here    
XElement xElement = XElement.Parse(xml);
//This now holds the set of all elements named field
var items = 
       xElement
      .Descendants("field")
      .Where(n => (string)n.Attribute("name") == "Name");