2013-05-14 5 views
1

Я немного XML помещается в строку, называемую MyContent:Чтение XML документа с помощью LINQ TO XML

<People xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Person ID="1" name="name1" /> 
    <Person ID="2" name="name2" /> 
    (....) 
    <Person ID="13" name="name13" /> 
    <Person ID="14" name="name14" /> 
</People> 

и в C# я хранится предыдущее содержимое XML в переменной строки, как показано ниже:

 private string myContent = String.Empty + 
     "<People xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" + 
     "<Person ID=\"1\" name=\"name1\" />" + 
     "<Person ID=\"2\" name=\"name2\" />" + 
     (...) 
     "<Person ID=\"13\" name=\"name13\" />" + 
     "<Person ID=\"14\" name=\"name14\" />" + 
     "</People>"; 

и загружаю, как показано ниже:

XDocument contentXML = XDocument.Parse(myContent); 

я перебирать все их:

IEnumerable<XElement> people = contentXML.Elements(); 
foreach (XElement person in people) 
{ 
    var idPerson = person.Element("Person").Attribute("ID").Value; 
    var name = person.Element("Person").Attribute("name").Value 
    // print the person .... 
} 

Проблема в том, что я получаю только первого человека, а не остальных. Он говорит, что у людей есть 1 элемент, и он должен иметь 14.

Любые идеи?

+0

Почему у вас есть String.Empty в начале? – CloudyMarble

+0

Не обязательно String.пусто, но как вы думаете, это причина? – user1624552

+0

Может быть, код выглядит нормально для меня – CloudyMarble

ответ

2

Проблема в том, что вы запрашиваете Elements() из корня документа. На данный момент существует только один элемент: People.

То, что вы на самом деле хотите сделать что-то вроде:

var people = contentXML.Element("People").Elements() 

Таким образом, ваш цикл будет выглядеть примерно так:

IEnumerable<XElement> people = contentXML.Element("People").Elements(); 
foreach (XElement person in people) 
{ 
    var idPerson = person.Attribute("ID").Value; 
    var name = person.Attribute("name").Value; 
    // print the person .... 
} 

Это итерацию по каждому из Person элементов, как вы намерены.

+0

Как вы говорите, Элемент («Люди») был пропущен между contentXML и Elements(). Теперь это работает, спасибо! – user1624552

+0

@ user1624552: Добро пожаловать. Иногда это легко пропустить. –

Смежные вопросы