使用LINQ将字典转换为XML

本文关键字:XML 转换 字典 LINQ 使用 | 更新日期: 2023-09-27 18:18:24

下面的函数接收Dictionary并将其存储到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>

使用LINQ将字典转换为XML

这将生成你想要的格式的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)
          )
      );