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);
扫管笏我必须用“????”在查询中
请给出解决方案
答案 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);