2016-11-07 4 views
0

Допустим, у меня есть класс Person:Использование XElement разобрать этот XML в массив

public class Person 
{ 
    public string Name { get; set; } 
} 

Как разобрать файл XML, содержащий

<person> 
    <name>a</name> 
</person> 
<person> 
    <name>b</name> 
</person> 

в массив из двух Person с?

Это вариант этого вопроса: Specific parsing XML into an array

Единственное отличие состоит в том, что нет <people></people> окружающих весь XML. Начало начинается с <person>.

+6

Если нет внешнего корневого тега, то он является недействительным XML по определению. Вы должны сами проанализировать его или изменить строку, чтобы сделать ее действительной. – Jonesopolis

+0

Если нет внешнего корневого тега, то это недопустимый xml, например @Jonesopolis. – Maddy

+0

Этот «XML» недействителен, см. Https://www.w3.org/TR/REC-xml/#dt-root. Но если вам все равно нужно загрузить его в XDocument, см. [C# XDocument Load с несколькими корнями] (https://stackoverflow.com/questions/18186225/c-sharp-xdocument-load-with-multiple-roots). Или вам действительно нужно десериализовать «Список » и не загружать в «XElement»? – dbc

ответ

1

Попробуйте

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string xml = 
       "<person>" + 
        "<name>a</name>" + 
       "</person>" + 
       "<person>" + 
        "<name>b</name>" + 
       "</person>"; 
      xml = "<Root>" + xml + "</Root>"; 

      XDocument doc = XDocument.Parse(xml); 

      List<Person> people = doc.Descendants("person").Select(x => new Person() { 
       Name = (string)x.Element("name") 
      }).ToList(); 
     } 
    } 
    public class Person 
    { 
     public string Name { get; set; } 
    } 
}