【问题标题】:Dictionary to XML using LINQ使用 LINQ 将字典转换为 XML
【发布时间】:2013-06-14 22:02:43
【问题描述】:

所以我有下面的函数,它接受一个字典并将它存储到一个 XML 文件中。

static void DictionaryToXML(Dictionary<string,User> UserClassDict, string xmldoc)
        {

            Console.WriteLine("Moving User Dictionary data to XML (" + xmldoc + ")...");

            XElement el = new XElement("UserClassDictionary",
       UserClassDict.Select(kv => new XElement(kv.Key,
                    kv.Value.ControlNumber.Select(num => new XElement("ControlNumber", num)))));

            var xml = el.ToString();
            File.WriteAllText(xmldoc, xml);
        }

输出如下所示

    <?xml version="1.0"?>
        -<UserClassDictionary>-
<amsmith>
     <ControlNumber>1298136</ControlNumber>
</amsmith>
-<asnyder>
     <ControlNumber>1296234</ControlNumber>
</asnyder>
-<atreckey>
     <ControlNumber>1295885</ControlNumber>
</atreckey>

         </UserClassDictionary>

我需要帮助来重新格式化这个 XML。我希望格式看起来与此非常相似:

<UserClassDictionary>
  <User id="amsmith">
        <ControlNumbers>
            <ControlNumber> 111222 </ControlNumber>
        </ControlNumbers>
  </User>
  <User id="asnyder">
        <ControlNumbers>
            <ControlNumber> 222333 </ControlNumber>
            <ControlNumber> 222444 </ControlNumber>
        </ControlNumbers>
  </User>

【问题讨论】:

  • 只是出于好奇,您是在 IE 之类的浏览器中查看文件,还是在 Visual Studio 中的 XMLViewer 中查看文件?尝试在记事本(或 Visual Studio 中的文本查看器)中打开它。
  • @Tim 我发布的第一个 XML 块正在 IE 中查看。
  • 我是这么认为的。如果你打开你在记事本中创建的文件,我敢打赌它看起来会很好。 IE 允许您展开和折叠具有子元素的元素(您发布的代码中的 -&lt;atreckey&gt; 之类的内容是我提出这个问题的原因)。
  • @MaylorTaylor 一点建议 - 在 C# 中,我们使用 camelCase 格式作为方法参数名称。最好将控制数字属性命名为ControlNumbers,因此它是一个集合,而不是单个数字。

标签: c# xml linq dictionary


【解决方案1】:

这将以您想要的格式生成 xml:

new XElement("UserClassDictionary",
      from kvp in UserClassDict
      select new XElement("User",
          new XAttribute("id", kvp.Key),
          new XElement("ControlNumbers",
               from cn in kvp.Value.ControlNumber
               select new XElement("ControlNumber", cn)
          )
      );

【讨论】:

  • 是的 - 我没有仔细观察差异(我认为这是显示问题而不是内容问题)。 +1
  • @Tim 没问题 :) 我认为它应该生成所需的 xml
  • 它做到了!谢谢@lazyberezovsky
猜你喜欢
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 2016-08-17
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
相关资源
最近更新 更多