C# - 使用Linq选择XML子元素

10

我有如下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>
我想使用 Linq 迭代 name 节点。我尝试了以下代码:
var items = (from i in doc.Descendants("row")
                     select new
                     {
                         Text = i.Value

                     }).ToList();

但它没有以我需要的方式工作。有什么建议吗?

3个回答

19
var items = doc.Descendants("field")
               .Where(node => (string)node.Attribute("name") == "Name")
               .Select(node => node.Value.ToString())
               .ToList();

1
linq中的doc.Descendants是什么? - KendoStarter

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>

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

2
Ray,你是我最喜欢的人。加油! - RhysC

1

我认为Linq to Sql是最直接的方法:

var items = (from c in doc.Descendants("field")
            where c.Attribute("name").Value == "Name"
            select c.Value
            ).ToList();

7
这是“查询理解语法”,而不是Linq-to-sql :) - Lee Campbell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接