XDocument获取具有属性的所有节点

时间:2011-05-27 06:43:26

标签: c# xml linq-to-xml

我有以下XML文档:

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

我正在尝试使用XDocument解析此XML,以便获取包含节点及其值的列表(Dictionary):

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

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

6 个答案:

答案 0 :(得分:4)

我在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);

答案 1 :(得分:0)

像这样的东西

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

希望这有帮助

答案 2 :(得分: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);
    }
}

答案 3 :(得分:0)

如果你有一份包含你在这里展示的内容的文件,这应该有效:

XDocument doc = ...;
var dict = doc.Root
    .Elements()
    .ToDictionary(
        e => e.Name.ToString(),
        e => e.Attribute("value").Value);

答案 4 :(得分: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);
}

答案 5 :(得分:0)

您可以使用xmldocument / xmtextreader对象使用这些链接这些将有所帮助

http://msdn.microsoft.com/en-us/library/c445ae5y(v=vs.80).aspx

http://www.c-sharpcorner.com/uploadfile/mahesh/readwritexmltutmellli2111282005041517am/readwritexmltutmellli21.aspx

但我强烈建议尽可能使用linq to xml,这很容易和易于管理 http://www.codeproject.com/KB/linq/LINQtoXML.aspx