【问题标题】:C# - Select XML Descendants with LinqC# - 使用 Linq 选择 XML 后代
【发布时间】:2009-09-17 14:47:52
【问题描述】:

我有以下 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();

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

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:
    var items = doc.Descendants("field")
                   .Where(node => (string)node.Attribute("name") == "Name")
                   .Select(node => node.Value.ToString())
                   .ToList();
    

    【讨论】:

    • doc.Descendants 在 linq 中的作用是什么?
    【解决方案2】:

    首先,确保你的 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");
    

    【讨论】:

    • 雷,你是我的最爱。大起大落。
    【解决方案3】:

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

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

    【讨论】:

    • 这是“查询理解语法”,而不是 Linq-to-sql :)
    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多