如何在C#中存储xml文件中的重复数据

时间:2010-09-27 09:15:52

标签: c# xml

我有一个像

这样的xml文件
<Root>
 <Child val1="1" Val2="0"/>
 <Child val1="1" Val2="2"/>
 <Child val1="1" Val2="3"/>
 <Child val1="1" Val2="4"/>
 <Child val1="1" Val2="5"/>
 <Child val1="6" Val2="0"/>
 <Child val1="7" Val2="0"/>
</Root>

我需要将数据存储在任何临时存储(即Dictionary)中以进行某种操作。但我不能在这里使用dictionary,因为字典不支持相同的键。任何人都可以建议我更好地存储这些数据吗?

3 个答案:

答案 0 :(得分:2)

好吧,您可以使用Dictionary<int, List<int>> - 或仅用于存储(无更改),您可以使用LINQ的ToLookup方法,它将非常轻松地为您构建多值地图。类似的东西(使用LINQ to XML):

var lookup = doc.Descendants("Child")
                .ToLookup(x => (int) x.Attribute("val1"),
                          x => (int) x.Attribute("val2"));

// Will iterate 5 times, printing 0, 2, 3, 4, 5 
foreach (var value in lookup[1])
{
    Console.WriteLine(value); 
}

编辑:要显示所有信息,您可以执行以下操作:

foreach (var grouping in lookup)
{
    foreach (var value in grouping)
    {
        Console.WriteLine("{0} {1}", grouping.Key, value);
    }
}

答案 1 :(得分:1)

如果是.NET 4.0,您可以使用Tuple<int, int>和List&lt; Tuple&lt; int,int&gt;&gt;如果数据不是键值对

答案 2 :(得分:0)

你仍然可以使用字典作为val1值,只需将第二个值作为值列表而不仅仅是列表。然后只需检查DataKey是否存在,如果它确实执行了list.Add(val2)