2012-02-10 2 views
0

Это структура моего XML-файла.Нужна помощь в Linq, мне нужно добавить данные в список

<Resto> 
<ID>2</ID> 
<Name>name</Name> 
<Category>categroty</Category> 
<Places> 
    <Address> 
    <Location>loc</Location> 
    <Number>num</Number> 
    <Longitude>"empty"</Longitude> 
    <Latitude>"empty"</Latitude> 
    </Address> 
</Places> 
</Resto> 

Долгота и широта пусты, я не использую их сейчас, это для последующих обновлений. И некоторые из них могут иметь более 1 Адрес:

<Address> 
<Location>loc</Location> 
    <Number>num</Number> 
    <Longitude>"empty"</Longitude> 
    <Latitude>"empty"</Latitude> 
    </Address> 

Также я сделал этот запрос, который работает прекрасно:

var anything = from resto in appDataXml.Descendants("Resto") 

        select new limit() 
        { 
         ID = resto.Element("ID").Value, 
         Name = resto.Element("Name").Value, 
         Categories = resto.Element("Category").Value 
        }; 

У меня есть это в пределе класса:

public string Name{get;set;} 
    public string ID { get; set; } 
    public string Categories{get;set;} 
    public List<Address> Addresses { get; set; } 

и «Адрес» - это еще один класс с полем «Местоположение и номер».

В любом случае, мой вопрос заключается в том, как я могу запросить файл Xml и добавить местоположение и номер в список адресов, чтобы я мог добавить эти значения в ListBox.

Большое спасибо.

ответ

0
var doc = XDocument.Load("test.xml"); 
List<Address> locations = (from address in doc.Root.Element("Places").Elements("Address") 
     select new Address 
     { 
       Location = address.Element("Location").Value, 
       Number = address.Element("Number").Value, 
     }).ToList(); 

Убедитесь, что корневой узел (как <parent>):

<parent> 
    <ID>1</ID> 
    <Name></Name> 
    <Category></Category> 
    <Places> 
    <Address> 
     <Location></Location> 
     <Number></Number> 
    </Address> 
    <Address> 
     <Location></Location> 
     <Number></Number> 
    </Address> 
    </Places> 
</parent> 

Update: Если ваш XML выглядит следующим образом:

<Restos> 
    <Resto> 
    <ID>1</ID> 
    <Name>name</Name> 
    <Category>categroty</Category> 
    <Places> 
     <Address> 
     <Location>loc1</Location> 
     <Number>num1</Number> 
     <Longitude>"empty"</Longitude> 
     <Latitude>"empty"</Latitude> 
     </Address> 
    </Places> 
    </Resto> 
    <Resto> 
    <ID>2</ID> 
    <Name>name</Name> 
    <Category>categroty</Category> 
    <Places> 
     <Address> 
     <Location>loc2</Location> 
     <Number>num2</Number> 
     <Longitude>"empty"</Longitude> 
     <Latitude>"empty"</Latitude> 
     </Address> 
    </Places> 
    </Resto> 
</Restos> 

Вы можете использовать этот код, чтобы разобрать его:

var doc = XElement.Load("test2.xml"); 
List<Resto> restos = (from resto in doc.Elements("Resto") 
         select new Resto 
         { 
          ID = resto.Element("ID").Value, 
          Name = resto.Element("Name").Value, 
          Category = resto.Element("Category").Value, 
          Addresses = (from address in resto.Element("Places").Elements("Address") 
             select new Address 
             { 
              Location = address.Element("Location").Value, 
              Number = address.Element("Number").Value, 
             }).ToList() 
         }).ToList(); 

Где Resto и Address определяются как:

public class Resto 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 
    public string Category { get; set; } 
    public List<Address> Addresses { get; set; } 
} 

public class Address 
{ 
    public string Location { get; set; } 
    public string Number { get; set; } 
} 
+0

I как вы сказали, но я получил исключение nullReferenceException. Есть идеи ? – user1200204

+0

@ user1200204 Применяете ли вы этот код к другому (возможно, большему) файлу xml? Можете ли вы обновить свой вопрос с помощью более полной структуры xml? – Meysam

+0

Я обновил его, надеюсь, что он станет понятным. – user1200204

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