Linq to XML query - PullRequest
       14

Linq to XML query

0 голосов
/ 07 июня 2010

Я загружаю из xml некоторую информацию о достопримечательностях города, и моя структура xml выглядит следующим образом:

<InterestPoint>
        <id>2</id>
        <name>Residencia PAC</name>        
        <images>
            <image>C:\Pictures\Alien Places in The World\20090625-alien11.jpg</image>
            <image>C:\Alien Places in The World\20090625-alien13.jpg</image>
        </images>
        <desc>blah blah blah blah</desc>
        <Latitude>40.286458</Latitude>
        <Longitude>-7.511921</Longitude>
    </InterestPoint>

У меня проблемы с получением информации об изображениях, я могу получить только одно изображение, но в этом примере их два. Я использую запрос Linq:

CityPins = (from c in PointofInterest.Descendants("InterestPoint")
                       select new InterestPoint
                       {
                           // = c.Attribute("Latitude").Value,
                           //longitude = c.Attribute("Longitude").Value,

                           Name = c.Element("nome").Value,
                           LatLong = new VELatLong(double.Parse(c.Element("Latitude").Value), double.Parse(c.Element("Longitude").Value)),
                           Desc = c.Element("descricao").Value,
                           Images = (from img in c.Descendants("imagens")
                           select new POIimage
                           {

                               image = new Uri(img.Element("imagem").Value),


                           }).ToList<POIimage>(),                       




                       }).ToList<InterestPoint>(); 

Images - это List<POIimages>, где POIimage - это класс с полем Uri.

Может ли кто-нибудь помочь мне исправить этот запрос?

Ответы [ 2 ]

2 голосов
/ 07 июня 2010

Написав c.Descendants("images"), вы перебираете все элементы <images> и получаете первый элемент <image>, вызывая img.Element("imagem").

Поскольку существует только один <images> (который содержит несколько <image> элементов), вы получаете только одно изображение.
Другие элементы <image> внутри <images> игнорируются, поскольку вы ничего с ними не делаете.

Вам нужно вызвать c.Descendants("image") во внутреннем запросе, чтобы получить все элементы <image>.

Например:

Images = (from img in c.Descendants("image")
          select new POIimage { image = new Uri(img.Value) }
         ).ToList(),
1 голос
/ 07 июня 2010

Попробуйте это (не могу проверить, нет редактора VS на данный момент).

...
Images = (from img in c.Descendants("image")).SelectMany( new POIimage 
                           { 
                                image = new Uri(img.Element("imagem").Value)
                           }).ToList<POIimage>(),   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...