将XML文档转换为字典

Pho*_*exo 10 c# xml parsing dictionary

我不需要编辑任何XML文件或任何东西,这只是用于阅读和解析.

我希望能够将XML文档作为字典处理,例如:username = doc["username"];,但我无法找到如何"转换"文档.我也遇到了重复键名的问题,但通过将每个值附加为1,2等可以很容易地避免这种情况.也很容易循环.

这可能吗?将(已解析的)XML文档视为字典?


对Mehrdad的回答:它有时会有所不同,这取决于用户的要求.如果用户请求x,那么它将是:

<xml>
    <test>foo</test>
    <bar>123</bar>
    <username>foobar</username>
</xml>
Run Code Online (Sandbox Code Playgroud)

但如果他要求y,就会像

<xml>
    <ammount>1000</ammount>
    <mail>...@...</mail>
    <username>foobar</username>
</xml>
Run Code Online (Sandbox Code Playgroud)

最好的是如果这样:

<xml>
<mengde>100</mengde>
<type>3</type>
<mail>foo</mail>
<crypt>bar</crypt>
<username>bar</username>
</xml>"
Run Code Online (Sandbox Code Playgroud)

可以解析然后作为doc["mengde"]等进行访问.

mdm*_*m20 15

您可以使用linq to xml来做你想做的事(如果我明白你想要的话)

string data = "<data><test>foo</test><test>foobbbbb</test><bar>123</bar><username>foobar</username></data>";

XDocument doc = XDocument.Parse(data);
Dictionary<string, string> dataDictionary = new Dictionary<string, string>();

foreach (XElement element in doc.Descendants().Where(p => p.HasElements == false)) {
    int keyInt = 0;
    string keyName = element.Name.LocalName;

    while (dataDictionary.ContainsKey(keyName)) {
        keyName = element.Name.LocalName + "_" + keyInt++;
    }

    dataDictionary.Add(keyName, element.Value);
}
Run Code Online (Sandbox Code Playgroud)


Tar*_*rik 5

XML 数据

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <resource key="123">foo</resource>
    <resource key="456">bar</resource>
    <resource key="789">bar</resource>  
</data>
Run Code Online (Sandbox Code Playgroud)

转换代码

string s = "<data><resource key=\"123\">foo</resource><resource key=\"456\">bar</resource><resource key=\"789\">bar</resource></data>";
XmlDocument xml = new XmlDocument();
xml.LoadXml(s);
XmlNodeList resources = xml.SelectNodes("data/resource");
SortedDictionary<string,string> dictionary = new SortedDictionary<string,string>();
foreach (XmlNode node in resources){
   dictionary.Add(node.Attributes["key"].Value, node.InnerText);
}
Run Code Online (Sandbox Code Playgroud)

这个问题在这里之前被问过,所以你可以在这个链接中找到所有答案:

将 xml 转换为排序字典

希望能帮助到你。


Rob*_*ney 5

你的问题确实不是很清楚,但我认为这符合你的要求:

XmlDocument doc = new XmlDocument();
doc.LoadXml(@"<xml>
<mengde>100</mengde>
<type>2</type>
<foo>bar</foo>
</xml>");

Dictionary<string, string> d = new Dictionary<string, string>();
foreach (XmlNode n in doc.SelectNodes("/xml/*")
{
   d[n.Name] = n.Value;
}
Run Code Online (Sandbox Code Playgroud)