Преобразование XML-документа в словарь

Мне не нужно редактировать какой-либо XML-файл или что-либо, это только для чтения и анализа.

Я хочу иметь возможность обрабатывать XML-документ как словарь, например:username = doc["username"];, Но я могу'не узнать, какперерабатывать" документ. Я'Мы также столкнулись с проблемой дублирования имен ключей, но этого можно легко избежать, добавив каждое значение с 1, 2 и т. д .; облегчая обход цикла тоже.

Это возможно? Рассматривать (анализируемый) XML-документ как словарь?

Ответ Mehrdad: Это время от времени меняется, это зависит от запроса от пользователя. Если пользователь запрашиваетxтогда это будет:


    foo
    123
    foobar

Но если он проситyбудет как


    1000
    [email protected]
    foobar

Лучше всего было бы, если это:


100
3
foo
bar
bar
"

Может быть проанализирован и затем доступен какdoc["mengde"] и т.п.

 jmucchiello10 нояб. 2009 г., 21:01
Как вы хотите обрабатывать поддокументы? Что делает док [»Foo»] вернуться в1<a>4</a>5? Вам нужно объяснить, как вы хотите получить доступ к doc / foo / a, чтобы мы могли вам помочь.
 Mehrdad Afshari10 нояб. 2009 г., 19:40
Какие'Какова структура XML-документа?
 Phoexo10 нояб. 2009 г., 21:31
Узлы, которые содержат узлы, будут встроены, я использую только те, которые содержат текст. В вашем примере: х, а и б.

Ответы на вопрос(4)

Ваш вопрос'на самом деле не очень понятно, но я думаю, что это делает то, что вы хотите:

XmlDocument doc = new XmlDocument();
doc.LoadXml(@"
100
2
bar
");

Dictionary d = new Dictionary();
foreach (XmlNode n in doc.SelectNodes("/xml/*")
{
   d[n.Name] = n.Value;
}
Решение Вопроса

Вы можете использовать linq to xml, чтобы делать то, что вы хотите (если я понимаю, что вы хотите)

string data = "foofoobbbbb123foobar";

XDocument doc = XDocument.Parse(data);
Dictionary dataDictionary = new Dictionary();

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);
}
 Phoexo10 нояб. 2009 г., 21:37
Спасибо! Работал точно так же, как исключено :)

Данные XML



    foo
    bar
    bar  

Код конверсии

string s = "foobarbar";
XmlDocument xml = new XmlDocument();
xml.LoadXml(s);
XmlNodeList resources = xml.SelectNodes("data/resource");
SortedDictionary dictionary = new SortedDictionary();
foreach (XmlNode node in resources){
   dictionary.Add(node.Attributes["key"].Value, node.InnerText);
}

Этот вопрос был задан ранее здесь, и поэтому вы можете найти все ответы по этой ссылке:

конвертировать xml в отсортированный словарь

Надеюсь, поможет.

 Phoexo10 нояб. 2009 г., 20:23
Тай, но яЯ предпочел бы использовать имя тега, чем добавлять атрибут ко всему.

Это н't именно то, что вы ищете, но может представлять интерес:http://blogs.msdn.com/csharpfaq/archive/2009/10/01/dynamic-in-c-4-0-introducing-the-expandoobject.aspx

 Phoexo10 нояб. 2009 г., 20:22
Тот'для C # 4.0 и об использовании ExpandoObject и dynamic, так что это немне не поможет
 nikmd2311 нояб. 2009 г., 16:56
Ах, извините за это.

Ваш ответ на вопрос