C# - 使用Linq选择XML Descendants

Yan*_*Yan 8 c# xml linq

我有以下XML结构:

<row>
  <field name="Id">1</field>
  <field name="AreaId">1</field>
  <field name="Name">?&quot;?</field>
</row>
<row>
  <field name="Id">2</field>
  <field name="AreaId">4</field>
  <field name="Name">???????</field>
</row>
Run Code Online (Sandbox Code Playgroud)

我想name用Linq 迭代节点.我试过这个:

var items = (from i in doc.Descendants("row")
                     select new
                     {
                         Text = i.Value

                     }).ToList();
Run Code Online (Sandbox Code Playgroud)

但它没有按照我需要的方式工作.有什么建议?

Meh*_*ari 16

var items = doc.Descendants("field")
               .Where(node => (string)node.Attribute("name") == "Name")
               .Select(node => node.Value.ToString())
               .ToList();
Run Code Online (Sandbox Code Playgroud)


Ray*_*sen 11

首先,确保您的XML具有单个根节点:

<rows>
<row>
  <field name="Id">1</field>
  <field name="AreaId">1</field>
  <field name="Name">?&quot;?</field>
</row>
<row>
  <field name="Id">2</field>
  <field name="AreaId">4</field>
  <field name="Name">???????</field>
</row>
</rows>
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用以下代码加载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");
Run Code Online (Sandbox Code Playgroud)

  • 雷,你是我的最爱.大人物. (2认同)