Чтение XML в словарь - PullRequest
10 голосов
/ 05 июля 2011

Мне нужно прочитать XML-файл в словарь.

Я прочитал несколько руководств, и меня смутили только странные слова, которые я не понимаю (такие как узлы, проверка XML и т. Д.). Итак, не могли бы вы пройти через меня?

У меня есть файл XML, который написан в этом формате:

<database>
    <def number="1" name="one"/>
    <def number="2" name="two"/>
</database>

Как уже упоминалось, я хочу сохранить его в словаре. Как бы я поступил об этом?

Ответы [ 2 ]

15 голосов
/ 05 июля 2011
var data = XElement.Parse(xml)
    .Elements("def")
    .ToDictionary(
        el => (int)el.Attribute("number"),
        el => (string)el.Attribute("name")
    );

Это:

  • анализирует xml в XElement (начиная с <database>)
  • перебирает элементы <def ...>
  • образует словарь, используя @number в качестве ключа (интерпретируя как int), и @name в качестве значения (в виде строки)
  • назначает этот словарь для data, который неявно набирается как Dictionary<int,string>
8 голосов
/ 05 июля 2011

Ваш вопрос простой, но не несоответствующий.Не беспокойсяЯ объясню, что вы должны делать.

Сначала вам нужно загрузить этот XML-файл (если он находится на диске).В противном случае вам не нужен этот шаг

XDocument database = XDocument.Load(pathToYourXmlFile);

до этого момента, вы получили:

<database>
    <def number="1" name="one"/>
    <def number="2" name="two"/>
</database>

Затем вы должны получить список всех элементов def :

List<XElement> defs = database.Elements("def");

до этого, вы получили:

<def number="1" name="one"/>
<def number="2" name="two"/>

Теперь вы должны получить каждый элемент списка (каждый def в defs):

foreach(XElement def in defs)
{
    // Here you have each def <def number="x" name="y" />
    int number = def.Attribute("number").value;
    string name = def.Attribute("name").value;
}

код для извлечения информации из каждого определения:

int number = def.Attribute("number").value;
string name = def.Attribute("name").value;

Теперь, когда у вас есть свой номер и имя, просто добавьте его в свой словарь.

dictionary.Add(number, name);

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

...