2011-05-27 137 views
0

的所有节点,我有以下XML文档:的XDocument得到与属性

<parameters> 
    <source value="mysource" /> 
    <name value="myname" /> 
    <id value="myid" /> 
</parameters> 

我试图解析这个XML,使用的XDocument这样我会得到包含节点列表(词典)和它的价值:

 
source => mysource, 
name => myname, 
id => myid 

有关如何做到这一点的任何想法?

回答

3

我想这在LINQPad中提供,它提供了您正在寻找的内容:

string xml = @"<parameters> 
    <source value=""mysource"" /> 
    <name value=""myname"" /> 
    <id value=""myid"" /> 
</parameters>"; 

var doc = XDocument.Parse(xml); 
IDictionary dict = doc.Element("parameters") 
    .Elements() 
    .ToDictionary(
    d => d.Name.LocalName, // avoids getting an IDictionary<XName,string> 
    l => l.Attribute("value").Value); 
0

像这样的事情

XDocument doc = XDocument.Parse(xmlText); 
IDictionary<string,string> dic = doc.Elements("parameters").ToDictionary(e => e.Name.LocalName, e => e.Value); 

希望这有助于

0
using System; 
using System.Linq; 
using System.Xml.Linq; 
using System.Collections.Generic; 

class Program{ 
    static void Main(){ 
     var doc = XDocument.Load("1.xml"); 
     var result = (from node in doc.Root.Elements() 
        select new{ Key = node.Name, Value = node.Attribute("value").Value}) 
        .ToDictionary(p =>p.Key, p=>p.Value); 
     foreach(var p in result) Console.WriteLine("{0}=>{1}", p.Key, p.Value); 
    } 
} 
0

只要你有一个与你在这里展示的内容的文档,这应该工作:

XDocument doc = ...; 
var dict = doc.Root 
    .Elements() 
    .ToDictionary(
     e => e.Name.ToString(), 
     e => e.Attribute("value").Value); 
0
XDocument x = XDocument.Parse(
      @"<parameters> 
       <source value=""mysource"" /> 
       <name value=""myname"" /> 
       <id value=""myid"" /> 
      </parameters>"); 

var nodes = from elem in x.Element("parameters").Elements() 
      select new { key = elem.Name.LocalName, value = elem.Attribute("value").Value }; 

var list = new Dictionary<string, string>(); 
foreach(var node in nodes) 
{ 
    list.Add(node.key, node.value); 
} 
+0

此版本在逻辑上等同采用ToDictionary方法,性能特征略有不同。 – hemp 2011-05-27 07:07:19