【问题标题】:How to add XElements dynamically in a loop?如何在循环中动态添加 XElements?
【发布时间】:2013-09-10 07:28:52
【问题描述】:

我得到一个包含所有子 XElement 的 HybridDictionary。
我不知道那里有多少物品。
所以不要这样做:

xmlDoc.Element("Parent").Add(
     new XElement("Child", new XAttribute("Name", "Child1"),
           new XElement("Id", "796"),
           new XElement("Name", "gdsa")
           etc..
      ));  

我正在尝试做这样的事情:

Strung [] allKeys = new String[ChildElements.Count];
TheHybridDictionary.Keys.CopyTo(allKeys, 0);

xmlDoc.Element("Parent").Add(
      new XElement("Child", new XAttribute("Name", "Child1"),
            for (int i = 0; i < TheHybridDictionary.Count; i++)
                   new XElement(allKeys[i], TheHybridDictionary[allKeys[i]])

但是如何将 for 循环中的任何内容连接为 XML 文档构造的一部分?

【问题讨论】:

  • 一张一张添加就行了?
  • 是的,正是……来自 HybridDictionary。 for循环本身是正确的,但我不知道如何将它连接到整个结构。
  • for (int i = 0; i &lt; TheHybridDictionary.Count; i++) xmlDoc.Element("Parent").Add( new XElement(allKeys[i], TheHybridDictionary[allKeys[i]])
  • 它们应该在“Child”元素下,而不是“Parent”下。循环替换了第一个示例中的 Id 和 Name
  • 哦,我看错了你的括号:)。尽管 Linq 更好,但您仍然可以将其用于孩子。

标签: c# xml dictionary linq-to-xml xelement


【解决方案1】:

问题是,你的HybridDictionary 类没有实现IEnumerable,所以你不能直接在它上面使用LINQ。

但是你可以使用allKeys 字符串数组来代替:

string [] allKeys = new String[ChildElements.Count];
TheHybridDictionary.Keys.CopyTo(allKeys, 0);

xmlDoc.Element("Parent").Add(
    new XElement("Child", new XAttribute("Name", "Child1"),
        allKeys.Select(x => new XElement(x, TheHybridDictionary[x])))

【讨论】:

    【解决方案2】:

    您可以使用 Stefan 评论中的 .Add() 方法,或使用 LINQ:

    xmlDoc.Element("Parent").Add(
      new XElement("Child", new XAttribute("Name", "Child1"),
            TheHybridDictionary.Select(kvp => new XElement(kvp.Key, kvp.Value)));
    

    【讨论】:

    • 确保顶部有“using System.Linq”。
    • 我有“使用 System.Linq”
    • 看起来HybridDictionary 没有实现IEnumerable,就像标准的Dictionary&lt;TKey, TValue&gt; 一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2015-05-24
    • 2020-04-29
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多