-1

所以,我有以下函数,它接收用户和 ControlNumbers 的字典并将其输出到 XML。在网上找到了一些做得很好的LINQ;但我有一个小问题。

    static Dictionary<string, User> UserClassDict = new Dictionary<string, User>();
     static void DictionaryToXML(Dictionary<string,User> UserClassDict)
        {
            XElement el = new XElement("root", UserClassDict.Select(kv => new XElement(kv.Key, kv.Value.ControlNumber

)));
        }

XML 如下所示:

    <root>
  <adolan>792365</adolan>
  <afeazell>791964</afeazell>
  <amsmith>790848</amsmith>
  <asnyder>790948789358</asnyder>
</root>

但正如您所看到的,ControlNumbers 通常是 6 位数长(但并非总是如此)。我想要发生的事情与此类似。

    <root>
<adolan>
<controlNumbers>123456</controlNumbers>
 </adolan>
<asnyder>
<controlNumbers>222111</controlNumbers>
<controlNumbers>333222</controlNumbers>
</asnyder>
</root>

最终我会让程序在启动时读取这个 XML 文件并填充字典,这样这个 XML 最终会变得非常大。任何想法都会有所帮助。

4

3 回答 3

2

尝试这个

XElement el = new XElement("root",
      UserClassDict.Select(kv => new XElement(kv.Key, 
       kv.Value.ControlNumbers.Select(num => new XElement("controlNumbers", num))))
);
于 2013-06-06T22:34:43.733 回答
0

我不完全理解 2 个或更多控制数字在您的字典中是如何表示的,但是如果您想做一些更复杂的 xlm 生成,您可以更改您的 lambda 以便它调用一个方法。

kv => new XElement(kv.Key, kv.Value.ControlNumber)

会变成

kv => BuildXMLElement(kv)

并且您可以根据需要实现BuildXMLElement构建元素

于 2013-06-06T22:28:12.963 回答
0

将您的 el 更改为

 XElement el = new XElement("root", UserClassDict.
            Select(kv => new XElement(kv.Key, 
                from it in kv.Value.ControlNumber
                select new XElement("controlNumbers", it)
                )));

上面的 LINQ 查询将创建多个 controlNumbers 标签

要连接,请使用

XElement el = new XElement("root", UserClassDict.
            Select(kv => new XElement(kv.Key, 
                String.Join(",", kv.Value.ControlNumber.ToArray())
                )));
于 2013-06-06T22:30:36.480 回答