2010-06-07 5 views
0

я загружаю из XML некоторой информации о точках города, представляющего интереса, и моей структуре XML выглядит следующим образом:Linq для запроса 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> 

У меня возникают проблемы, чтобы извлечь информацию изображения, я m может получить только одно изображение, но в этом примере есть два. Запроса 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>(); 

изображения является List<POIimages> где POIimage класс с полем Ури.

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

+0

Может ли быть несколько элементов '' элементов? – SLaks

ответ

2

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

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

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

Например:

Images = (from img in c.Descendants("image") 
      select new POIimage { image = new Uri(img.Value) } 
     ).ToList(), 
1

Попробуйте это (не мог, т тест, не имеют VS редактор, как сейчас).

... 
Images = (from img in c.Descendants("image")).SelectMany(new POIimage 
          { 
           image = new Uri(img.Element("imagem").Value) 
          }).ToList<POIimage>(), 
Смежные вопросы