首页 文章

从XML Document填充字典<string,List <string >>

提问于
浏览
-1

我想使用以下xml填充类型为 <string, List<string>> 的字典 .

<?xml version="1.0" encoding="utf-8" ?>
<Currencies>
  <Currency name="USD">
    <symbol>$</symbol>
    <symbol>USD</symbol>
    <symbol>Dollar</symbol>
  </Currency>
  <Currency name="INR">
    <symbol>Rs.</symbol>
    <symbol>₹</symbol>
  </Currency>

在字典中

Dictionary dctCurrency<string,List<string>>;

在这个货币名称应该是键,所有符号元素应该在字符串列表中 .

TIA

我试过以下代码,

var currencyXmlDocument = XDocument.Load(currencySymbolsDefinition);
var currencies = currencyXmlDocument.Root.DescendantNodes().OfType<XElement>();
currencySymbolsConfiguration = currencies.ToDictionary(l => l.Attribute("name").Value
    , l => l.Attribute("code").Value);

但它没有编译

3 回答

  • 3

    试试这个 . 这是容易出错的,没有检查,但可以给你一个基本的想法 .

    var str = @"<Currencies>
      <Currency name='USD'>
        <symbol>$</symbol>
        <symbol>USD</symbol>
        <symbol>Dollar</symbol>
      </Currency>
      <Currency name='INR'>
        <symbol>Rs.</symbol>
        <symbol>₹</symbol>
      </Currency>
    </Currencies>";
     var xx = XElement.Parse(str);
    
     var result = xx.Descendants("Currency")
        .ToDictionary(x => x.Attribute("name").Value, 
            x=>x.Descendants("symbol").Select(xy=>xy.Value).ToList());
    
  • -1

    假设您有一个xml如下:

    <root>
          <key>value</key>
    </root>
    

    元素到字典将如下:

    XElement rootElement = XElement.Parse("<root><key>value</key></root>");
    Dictionary<string, string> dict = new Dictionary<string, string>();
    foreach(var el in rootElement.Elements())
    {
       dict.Add(el.Name.LocalName, el.Value);
    }
    

    我不知道这是否有帮助 .

  • 1

    这是另一种选择:

    Dictionary<string, List<string>> dctCurrency;
    dctCurrency = (from c in doc.Root.Descendants("Currency")
                   select new
                   {
                      Key = c.Attribute("name").Value,
                      Value = c.Elements("symbol").Select(x => x.Value).ToList()
                   }).ToDictionary(k => k.Key, v => v.Value);
    

    或使用扩展方法:

    dctCurrency = doc.Root.Descendants("Currency")
                          .Select(c => new
                          {
                             Key = c.Attribute("name").Value,
                             Value = c.Elements("symbol").Select(x => x.Value).ToList()
                          })
                          .ToDictionary(k => k.Key, v => v.Value);
    

相关问题