【问题标题】:Generically Flatten XDocument using Linq?使用 Linq 通常展平 XDocument?
【发布时间】:2012-04-20 15:53:34
【问题描述】:

有一个 question 几乎完全符合我想要做的几乎相同的名称,但是我不知道我的 XML DOM 会是什么样子提前。

我想做这样的事情:

private static IEnumerable<XElement> FindAllContainers(XDocument xml)
{
          IEnumerable<XElement> query = from XElement outer in xml.Root.Elements()
                                        from XElement node in outer.Elements()
                                        where true //Enum.IsDefined(typeof(Role), GetContainerRole(node)) 
                                        select node;
                                        return query;
}

基本想法是我想针对任何给定的 XML 结构查询 all XElements 的枚举。上面的代码不返回任何结果。 xml 包含一个大型嵌套 XML 结构并且是一个 XDocument。另一个问题手动为元素提供标签名称。我不知道他们提前在方法中静态设置它是什么。

【问题讨论】:

  • 你想要什么样的结果?
  • 基本上是 XDocument (XML) 中每个节点的枚举。基本上这样我就可以将所有节点的集合作为一个集合而不是作为树来工作。虽然我最近发现 XPath 可能更适合我的问题,但我仍然对上述内容感到好奇。
  • 你可以使用 XPath 吗? [链接][1] [1]:stackoverflow.com/questions/3642829/…
  • 这看起来有点奇怪。您是否真的想以喜欢的问题的方式将其展平?如果是这样,您需要将节点的所有父节点的值混合到每个叶节点中。如果没有,一个简单的递归枚举应该可以解决问题。你往哪边走?

标签: c# xml linq


【解决方案1】:

所以在我看来,您只是想枚举文档中的所有元素。好吧,这里没什么复杂的,只需调用 Descendants() 方法(不带参数),它将返回文档中的所有元素。

private static IEnumerable<XElement> FindAllContainers(XDocument doc)
{
    return doc.Descendants();
}

【讨论】:

  • 噢!这正是我所需要的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多