XElement迭代并将其添加到父级
嗨,我有以下问题…请帮忙,因为我是C#编程的新手,没有以前的编程经验…
在我的代码中,我想在Xml文件中迭代XElement将Xelement添加到称为Capability的父级….这是我的代码……
if (xElem.HasElements) { foreach (XElement xChild in xElem.Element("Elements")) { Capability capChild = Parse(xChild); capParent.Children.Add(capChild); } }
这里foreach循环给出了一个错误
错误32 foreach语句无法对’System.Xml.Linq.XElement’类型的变量进行操作,因为’System.Xml.Linq.XElement’不包含’GetEnumerator’的公共定义……..
如何执行查找XElement是否有任何子项并将其添加到父Capability的function?
首先修复,添加’s’:
//foreach (XElement xChild in xElem.Element("Elements")) foreach (XElement xChild in xElem.Elements("Elements"))
这假设在xElem下的XML中有1个或多个标记
。
Henk的答案应该有效,但我个人会使用
foreach (XElement xChild in xElem.Descendants())
其中xElem等于您想要所有子元素的父元素。 或者您也可以使用LINQ查询基本上完成相同的任务
var children = from xChild in xElem.Descendants() select Parse(xChild)
它应该返回一个IEnumerable,你可以循环并添加这种方式。
编辑:
我刚刚意识到你说你是C#的新手而没有以前的编程经验。 我认为你理解为什么抛出这个错误也很重要。 在C#中,为了使用foreach循环,集合必须实现IEnumerable。 这样,集合类型可以定义数据的枚举方式。 XElement不可枚举,因为它意味着表示单个元素,而不是元素集合。 因此,使用xElem.Element(“ElementName”)意味着返回单个结果,而不是数组或集合。 使用xElem.Elements(“ElementName”)将返回与XName匹配的所有XElements的集合。 但是,如果您想要单个元素的所有子元素而不管名称,那么这就是xElem.Descendants()的用武之地。 您使用哪一个取决于您需要什么数据以及如何添加数据。