代码之家  ›  专栏  ›  技术社区  ›  Phoexo

将XML文档转换为字典

  •  9
  • Phoexo  · 技术社区  · 15 年前

    我不需要编辑任何XML文件或任何东西,这只是为了读取和解析。

    我希望能够将XML文档作为字典处理,例如: username = doc["username"]; 但我不知道如何“转换”文档。我还遇到了重复键名的问题,但是可以通过将每个值附加1、2等来轻松避免这一问题;这样也可以方便地进行循环。

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


    对Mehrdad的回答: 它随时间变化,取决于用户的请求。如果用户请求 x ,那么它将是:

    <xml>
        <test>foo</test>
        <bar>123</bar>
        <username>foobar</username>
    </xml>
    

    但如果他要求的话 y ,就像

    <xml>
        <ammount>1000</ammount>
        <mail>...@...</mail>
        <username>foobar</username>
    </xml>
    

    最好是这样:

    <xml>
    <mengde>100</mengde>
    <type>3</type>
    <mail>foo</mail>
    <crypt>bar</crypt>
    <username>bar</username>
    </xml>"
    

    无法解析,然后作为 doc["mengde"] 等。

    4 回复  |  直到 7 年前
        1
  •  15
  •   Assaf    10 年前

    您可以使用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);
    }
    
        2
  •  4
  •   Community pid    7 年前

    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>
    

    转换码

    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);
    }
    

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

    convert xml to sorted dictionary

    希望它有帮助。

        3
  •  4
  •   Robert Rossney    15 年前

    你的问题真的不太清楚,但我认为这是你想要的:

    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;
    }
    
        4
  •  0
  •   nikmd23    15 年前