【问题标题】:Using LINQ to XML to match deeper descendant elements?使用 LINQ to XML 匹配更深层次的后代元素?
【发布时间】:2011-04-14 13:47:20
【问题描述】:

假设我有以下 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <project>
    <ixGroup>105</ixGroup>
    <sGroup>Place Group</sGroup>
  </project>
  <project>
    ...

我使用以下代码从中提取不同的 &lt;ixGroup&gt;&lt;sGroup&gt; 文本值:

XDocument doc = XDocument.Load(@"C:\temp\xmlParse2.xml");

var projects = (from project in doc.Descendants("project")
                select new {
                    id = project.Element("ixGroup").Value,
                    name = project.Element("sGroup").Value
                }).Distinct();

foreach(var project in projects)
{
    project.id.Dump("id");
    project.name.Dump("name");
}

如果同一个 xml 文件有一个额外的元素,比如下面添加的 &lt;projects&gt;

<response>
  <projects>
    <project>
      <ixGroup>105</ixGroup>
      <sGroup>Place Group</sGroup>
    </project>
    <project>
      ...

如何修改上面的 LINQ 代码以仍然访问 &lt;project&gt; 元素?

【问题讨论】:

    标签: c# linq-to-xml descendant


    【解决方案1】:

    您不必这样做。我刚刚对其进行了测试,您当前的 LINQ 语句仍将返回所有 &lt;project&gt; 元素,无论它们是否嵌套在 &lt;projects&gt; 元素中。

    【讨论】:

      【解决方案2】:

      您根本不需要修改代码。 Descendants 方法将搜索尽可能多的树以找到匹配的元素,这既可以是诅咒也可以是祝福。在您的情况下,即使您添加了中间 &lt;projects&gt; 节点,所编写的代码也将继续工作。

      (只搜索直接子方法的方法是Children()

      【讨论】:

        【解决方案3】:

        Elements 只搜索子节点,但 Descendants 一直沿着树向下搜索。换句话说,您无需执行任何操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-26
          • 1970-01-01
          • 1970-01-01
          • 2022-01-18
          • 1970-01-01
          相关资源
          最近更新 更多