我想使用以下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);
但它没有编译
答案 0 :(得分: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 :(得分: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);
答案 2 :(得分:-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);
}
我不知道这是否有帮助。