2014-03-19 35 views

回答

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); 
    } 
} 
+0

我如何解析和形式的字典动态 – munisamy

+0

我已经编辑了答案解析我想先one.thanks.And我怎么comapre字典的值与单value.in dict1 –

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()); 
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); 

这些结果是这样的:

Results

我怀疑你想要第一个。

+0

- 我不跟随你的意思? – munisamy

+0

@munisamy的XML – Enigmativity

+0

如果我想使用dict1.containsValue(2)意味着它显示错误不能将int []转换为int.how我得到的单个键的值 – munisamy

相关问题