0

假设我有以下 XML 文件:

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

我使用以下代码从中提取 distinct<ixGroup><sGroup>text 值:

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 文件有一个额外的元素,<projects>如下所示:

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

我将如何修改上面的 LINQ 代码以仍然访问<project>元素?

4

3 回答 3

2

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

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

于 2011-04-14T13:53:05.580 回答
2

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

于 2011-04-14T13:58:12.237 回答
0

Elements 只搜索子节点,但 Descendants 一直沿着树向下搜索。换句话说,你不必做任何事情。

于 2011-04-14T13:53:22.493 回答