如何使用XML到LINQ从c#中的xml文件向字典添加数据

时间:2010-06-30 12:57:12

标签: c# xml linq

xml文件具有以下结构

<Root>
    <Child value="A"/>
    <Child value="B"/>
    <Child value="C"/>
    <Child value="D"/>
     <Child value="E"/>
</Root>

和dictonary

     Dictionary<int, string> dict = new Dictionary<int, string>();

我需要从文件中读取“value”的属性值,并将其作为值添加到dictonary并将索引作为键添加

    dict[1]="A"
    dict[2]="B"
    dict[3]="C"
    dict[4]="D"
    dict[5]="E"

为此我正在使用XML到LINQ查询

    dict = XDOC.Load(Application.StartupPath + "\\Test.xml"). 
                Descendants("Child").ToDictionary("????", x => x.Attribute("Value").Value);
扫管笏我必须用“????”在查询中

请给出解决方案

4 个答案:

答案 0 :(得分:1)

你当前的问题是,你不能在字典中有两个相同键的条目,我假设你需要某种标识符....

int i = 0;
var dic = XDOC.Load(...)
  .Root
  .Descendants("Child")
  .ToDictionary(el => (i++), el => el.Attribute("value").Value);

但是,如果它只是一个连续的集合,为什么不只是使用一个列表:

var list = XDOC.Load(...)
  .Root
  .Descendants("Child")
  .Select(el => el.Attribute("value").Value)
  .ToList();

编辑:我不知道元素索引部分,好叫人!

答案 1 :(得分:1)

dict = XDOC
    .Load(Application.StartupPath + "\\Test.xml")
    .Descendants("Child")
    .Select((x,i) => new {data=x, index=i})
    .ToDictionary(x => x.index, x => x.data.Attribute("Value").Value);

答案 2 :(得分:0)

如果您需要访问序列中元素的索引,则可以使用Func<TSource, int, TResult>的重载dict = XDOC.Load(Application.StartupPath + "\\Test.xml") .Descendants("Child") .Select((element, index) => new { index, value = element.Attribute("Value").Value }) .ToDictionary(x => x.index, x => x.value);

{{1}}

答案 3 :(得分:0)

我假设你实际上并不希望它们都具有相同的键,而是指示它们在原始集中的位置的索引值:

        var dict = xDoc.Descendants("Child")
            .Select((xe, i) => new { Index = i, Element = xe })
            .ToDictionary(a => a.Index, a => a.Element.Attribute("value").Value);