Linq到XML查询

时间:2010-06-07 16:37:29

标签: c# xml linq linq-to-xml

我正在从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>(); 

图像是List<POIimages>,其中POIimage是具有Uri字段的类。

有人可以帮我修复此查询吗?

2 个答案:

答案 0 :(得分:2)

通过撰写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 :(得分:1)

试试这个(无法测试,现在没有VS编辑器。)

...
Images = (from img in c.Descendants("image")).SelectMany( new POIimage 
                           { 
                                image = new Uri(img.Element("imagem").Value)
                           }).ToList<POIimage>(),