XElement 的子级

Posted

技术标签:

【中文标题】XElement 的子级【英文标题】:Children of XElement 【发布时间】:2010-10-03 23:14:19 【问题描述】:

如何获取 XElement 的子元素?

我目前正在使用 XElement.Descendants() 函数,它返回所有级别的 XElement,而不仅仅是子节点。

我真正想要的是一个只有孩子的 IEnumerable。

【问题讨论】:

【参考方案1】:

通过调用Element()Elements() 函数可以访问XElement 的直接子元素。使用带有名称的重载来访问特定元素,或者不使用名称来访问所有子元素。

还有类似的方法,例如 Attribute()Attributes(),您可能会觉得有用。

【讨论】:

这似乎解决了 OPs 的问题,但 Element() 没有无参数重载,所以当我知道它的 XName 可以变化时,这并不能帮助我获得第一个孩子。 如果你只想要第一个孩子,不管名字,尝试使用Elements().FirstOrDefault() 为什么他们不能直接称它为“XElement.Children”?更容易被发现。 @Tacroy 每个 XElement 都有两组孩子,其中任何一组都可能为空。一个是有序的子 elements 集,另一个是子 attributes 集 - 无论您认为应该在 Children 中找到哪个,其他会不同意。使用 ElementsAttributes 遵循 Xml 标准的命名法。 @Bevan 我认为更好的答案是可能还有一组 节点,每个节点都可能不是一个元素。属性实际上不是元素的子元素。【参考方案2】:

XElement.Nodes() 应该可以得到你想要的。

如果您只想要 XElement 子节点,那么您可能需要限制它(取决于您的 XML):

XElement.Nodes().OfType<XElement>()

【讨论】:

【参考方案3】:

XElement.Nodes

【讨论】:

以上是关于XElement 的子级的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 XElement.Elements() 是不是包含具有特定名称的节点?

c# Elements of elements using XElement

对 XElement 的子节点的索引访问

从 XElement 获取子元素 [重复]

如何将带有 xml 后代的 XElement 导入 SQL Server

在 XElement WriteTo 方法中,强制 XmlWriter 为具有已定义 xmlns 属性的子元素使用前缀