使用 LINQ to XML 来匹配更深层次的后代元素?

发布于 2024-11-01 11:06:37 字数 1140 浏览 1 评论 0原文

假设我有以下 XML 文件:

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

并且我使用以下代码从中提取不同的 文本值:

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文件有一个额外的元素,如下面添加的 元素:

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

How will I修改上面的 LINQ 代码以仍然访问 元素?

Suppose I have the following XML file:

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

And I use the following code to extract the distinct <ixGroup> and <sGroup> text values from it:

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");
}

If the same xml file had an extra element like the <projects> one added below:

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

How would I modify the LINQ code above to still access the <project> elements?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦中楼上月下 2024-11-08 11:06:38

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

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

You don't need to modify your code at all. The Descendants method will search as far down the tree as it needs to in order to find matching elements, which can be both a curse and a blessing. In your case, the code as written will continue to work even if you add an intermediate <projects> node.

(The method that only searches for direct child methods is Children().

眼角的笑意。 2024-11-08 11:06:38

元素仅搜索子节点,但后代会一直沿着树向下搜索。换句话说,您无需执行任何操作。

Elements only searches child nodes, but Descendants goes all the way down the tree. In other words, you won't have to do anything.

耳钉梦 2024-11-08 11:06:37

你不必这样做。我刚刚测试过,您当前的 LINQ 语句仍将返回所有 元素,无论它们是否嵌套在 元素中。

You wouldn't have to. I've just tested it, and your current LINQ statement will still return all the <project> elements regardless of whether they're nested within a <projects> element.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文