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 中找到哪个,其他会不同意。使用 Elements
和 Attributes
遵循 Xml 标准的命名法。
@Bevan 我认为更好的答案是可能还有一组 节点,每个节点都可能不是一个元素。属性实际上不是元素的子元素。【参考方案2】:
XElement.Nodes() 应该可以得到你想要的。
如果您只想要 XElement 子节点,那么您可能需要限制它(取决于您的 XML):
XElement.Nodes().OfType<XElement>()
【讨论】:
【参考方案3】:XElement.Nodes
【讨论】:
以上是关于XElement 的子级的主要内容,如果未能解决你的问题,请参考以下文章
如何确定 XElement.Elements() 是不是包含具有特定名称的节点?
c# Elements of elements using XElement