Импорт XML в массив строк — Windows Phone 7

Я использую эту функцию, чтобы получить данные файла xml в массив строк

 private void ReadXml(string Dictionary, char letter)
    {
        XDocument xml = XDocument.Load(Dictionary);
        string[] dictionary=new string[2];
        int i=0;
        IEnumerable<XElement> de = from el in xml.Descendants(letter.ToString())
                                   select el;
        foreach (XElement el in de)
        {
            dictionary[i++] = el.Value.ToString();
        }
    }

Но в созданном массиве все содержимое указанного тега xml объединено в первой строке.

Например, xml-файл

<?xml version="1.0" encoding="Unicode"?>
<Animals>
  <A>Ant</A>
  <B>
    <word>Boa</word>
    <word>Bear</word>
  </B>
</Animals>

и с xml.Descendants("B") производит dictionary[0]=BoaBear и dictionary[1]=NULL

Итак, как я могу сделать так, чтобы каждое слово попадало в отдельную ячейку массива?

Заранее спасибо.


person George Lydakis    schedule 02.08.2011    source источник
comment
Ваш XML плохо разработан. Вы должны использовать несколько тегов <Word> во всех случаях.   -  person SLaks    schedule 02.08.2011
comment
Вы правы, я использовал это слово1, слово2, потому что я думал, что я был тегом, который должен быть другим. Спасибо за совет, сразу поменяю :)   -  person George Lydakis    schedule 02.08.2011
comment
Вы также должны использовать теги <word> в <A>, даже если там всего одно слово. С однородно структурированными данными намного проще работать.   -  person SLaks    schedule 02.08.2011
comment
Вы не должны повторно анализировать словарь каждый раз, когда вызываете метод.   -  person SLaks    schedule 02.08.2011


Ответы (1)


Вам нужно перебрать элементы внутри тега <B>, вызвав Elements().

Например:

foreach(var word in xml.Root.Element("B").Elements())
person SLaks    schedule 02.08.2011
comment
Можете быть более конкретными? куда я должен позвонить el.Elements? - person George Lydakis; 02.08.2011
comment
Извиняюсь; de.Elements(). В foreach. Я добавлю правильный пример. - person SLaks; 02.08.2011
comment
Я использовал его таким образом, и я получил dictionary[0]=<word>Boa</word> и dictionary[1]=<word>Bear</word>. Но я думаю, что мы в правильном направлении :) - person George Lydakis; 02.08.2011
comment
Я нашел в чем проблема! Я забыл поместить .Value внутри цикла foreach. Теперь это работает! Большое спасибо за твою помощь! :) - person George Lydakis; 02.08.2011