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是否有任何子项并将其添加到父项能力的功能?
首先修复,添加's':
//foreach (XElement xChild in xElem.Element("Elements"))
foreach (XElement xChild in xElem.Elements("Elements"))
这假定在xElem下的XML中有一个或多个标签<Elements>
。
亨克的答案应该可以工作,但我个人会使用
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()用于播放的位置。 你使用哪一个取决于你需要什么数据以及你如何添加数据。
链接地址: http://www.djcxy.com/p/53789.html