2011-07-05 2 views
10

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

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

У меня есть XML-файл, который записывается в следующем формате:

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

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

+2

Вопросы и ответы, такие как этот, делают этот сайт таким удивительным. +1 для обоих. – neverseenjack

ответ

14
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 в качестве значения (в виде строки)
  • присваивает это значение d ictionary к data, который неявно классифицирован как Dictionary<int,string>
7

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

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

XDocument database = XDocument.Load(pathToYourXmlFile); 

до сюда, вы получили:

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

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

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

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

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

Теперь, вы должны получить каждый элемент списка (каждую Защиту в 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); 

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

+2

Должно ли это быть 'database.Elements (" def "). ToList()'? – codeulike