2016-05-16 59 views
1

我想创建一个通用的方法,它将读取一个xml并返回节点名称和属性值作为字典项目。如何从xml创建字典项目?

我一直在玩弄语法,但似乎无法完全正确。 我在这里错过了什么?

目前我有:

XElement doc = XElement.Load(dataStream); 
var item = from el in doc.Descendants() 
      where el.Attribute(attributeName) != null 
      select new 
      { 
       Name = el.Name.LocalName, 
       Value = el.Attribute(attributeName).Value 
      }.ToDictionary(o => o.Name, o => o.Value); 

回答

2

你应该用方括号包住LINQ查询:

public void Test() 
{ 
    const string attributeName = "name"; 
    XElement doc = XElement.Parse(@"<xml><elem id=""1"" /><anotherElem name=""test"" /></xml>"); 
    var items = (from el in doc.Descendants() 
     where el.Attribute(attributeName) != null 
     select new 
     { 
      Name = el.Name.LocalName, 
      Value = el.Attribute(attributeName).Value 
     }).ToDictionary(o => o.Name, o => o.Value); 

    Assert.AreEqual(1, items.Count); 
    Assert.AreEqual(true, items.ContainsKey("anotherElem")); 
    Assert.AreEqual("test", items["anotherElem"]); 
} 
+0

我正要张贴我的答案。我没有意识到我忘了包装查询。 – PrivateJoker