我的xml格式是这个
<?xml version='1.0' encoding='us-ascii'?>
<root>
<key value="22.wav">
<Index>18</Index>
</key>
<key value="EFG.wav">
<Index>5</Index>
<Index>14</Index>
</key>
</root>
我如何形成字典?
答案 0 :(得分:0)
以下是解析xml文件并填充字典的方法
Dictionary<string, int[]> keyIndexCollection = new Dictionary<string, int[]>();
XmlDocument doc = new XmlDocument();
doc.Load("input.xml");
XmlNodeList keyNodeList = doc.SelectNodes("root/key");
List<int> indexValues = new List<int>();
foreach (XmlNode node in keyNodeList)
{
XmlNodeList indexNodeList = node.SelectNodes("Index");
int parsedIndex;
indexValues.Clear();
foreach (XmlNode indexNode in indexNodeList)
{
if (int.TryParse(indexNode.InnerText, out parsedIndex))
{
indexValues.Add(parsedIndex);
}
}
keyIndexCollection.Add(node.Attributes["value"].Value, indexValues.ToArray());
}
这是一个用于迭代字典的示例代码
foreach (string key in keyIndexCollection.Keys)
{
int[] values = keyIndexCollection[key];
Console.WriteLine("Key = " + key);
foreach (int value in values)
{
Console.WriteLine("\tValue = " + value);
}
}
答案 1 :(得分:0)
你可以这样做:
var doc = XDocument.Load("path_to_xml_file.xml");
Dictionary<string, int[]> dictionary = new Dictionary<string, int[]>();
foreach (var key in doc.Root.Elements("key"))
{
dictionary.Add((string)key.Attribute("value"), key.Elements("Index").Select(o => int.Parse((string)o)).ToArray());
}
或使用.ToDictionary()
扩展方法进行简化:
var dict = doc.Root
.Elements("key")
.ToDictionary(o => (string) o,
p => p.Elements("Index").Select(o => int.Parse((string) o)).ToArray());
答案 2 :(得分:0)
如果您像这样加载XML:
var xd = XDocument.Load("path_to_xml_file.xml");
然后你可以创建两个不同的词典:
var dict1 =
xd
.Document
.Root
.Elements("key")
.ToDictionary(
x => x.Attribute("value").Value,
x => x.Elements("Index")
.Select(y => y.Value)
.ToArray());
var dict2 =
xd
.Document
.Root
.Elements("key")
.SelectMany(x => x
.Elements("Index")
.Select(y => new { x = x.Attribute("value").Value, y = y.Value }))
.ToDictionary(x => x.y, x => x.x);
这些结果如下:
我怀疑你想要第一个。