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

上一篇: XElement Iteration and adding it to parent

下一篇: What is Scala's yield?