【问题标题】:XElement Iteration and adding it to parentXElement 迭代并将其添加到父级
【发布时间】:2012-10-28 17:05:59
【问题描述】:

您好,我有以下问题...请帮忙,因为我是 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 的功能?

【问题讨论】:

    标签: c# .net xml xml-parsing


    【解决方案1】:

    首先修复,添加一个's':

    //foreach (XElement xChild in xElem.Element("Elements"))
      foreach (XElement xChild in xElem.Elements("Elements"))
    

    这假设您的 xElem 下的 XML 中有 1 个或多个标签 <Elements>。

    【讨论】:

      【解决方案2】:

      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 匹配的所有 XElement 的集合。但是,如果您想要单个元素的所有子元素而不管名称如何,这就是 xElem.Descendants() 发挥作用的地方。您使用哪一种取决于您需要什么数据以及添加方式。

      【讨论】:

      • 非常感谢 Leon..ur 的回答帮了很多忙...嘿,实际上我想从 XML 文档中提取文件和文件夹列表...。这是我的 XML 文档的样子。 ..
      • @Brijraj 在这个例子中你试图解析什么数据?您需要来自每个 的所有数据吗?更详细地了解您尝试解析的信息以及您打算如何使用它将帮助我定义更好的示例和解释。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2020-03-21
      • 1970-01-01
      相关资源
      最近更新 更多