2011-05-27 69 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