2012-07-15 31 views
1

我想解析这个XML,并可以成功获取名称和说明,但放在一起的图像是棘手的。两个单独的代码解析工作,但我想做一个解析,所以我可以将它们全部绑定到一个列表框。嗨,如何解析与子孙C后裔xml#

的XML看起来像这样

<stickers> 
    <sticker> 
     <imageData> 
      <baseImageUrl> ... want this </baseImageUrl> 
      <sizes> 
       <size> don't care about this </size> 
      </size> 
      <imageUrlSuffix> ..want this </imageUrlSuffix> 
     </imageData> 
     <description>.... want this </description> 
     <name> --want this </name> 
    <sticker> 
<stickers> 

我的代码同时适用于而是分开。如何合并到这一个解析...

XDocument streamFeed = XDocument.Load(new StringReader(response.Content)); 
var imagedata = from query in streamFeed.Descendants("sticker").Elements("imageData") 
    select new Stickers 
    { 
     image = (string)query.Element("baseImageUrl") + "huge" + (string)query.Element("imageUrlSuffix"), 
    }; 


var data = from query in streamFeed.Descendants("sticker") 
    select new Stickers 
    { 
     name = (string)query.Element("name"), 
     description = (string)query.Element("description"), 
    }; 

stickersListBox.ItemsSource = imagedata.Union(data); 

的数据显示在列表框中,但上面并排的描述,而不是侧面贴纸。

感谢


感谢Thomas下面,下面的代码工作,但一些用户配置文件得到一个空引用的异常(包括我自己的个人资料,这显然有数据)感谢Thoamas的援助也许这是一个无关错误?

XDocument streamFeed = XDocument.Load(new StringReader(response.Content)); 

        var query = 
         from sticker in streamFeed.Root.Descendants("sticker") 
         let imageData = sticker.Element("imageData") 
         select new Stickers 
         { 
          name = (string)sticker.Element("name"), 
          description = (string)sticker.Element("description"), 
          image = (string)imageData.Element("baseImageUrl") + "huge" + (string)imageData.Element("imageUrlSuffix") 
         }; 

        stickersListBox.ItemsSource = query; 
+1

这听起来像XML是被解析就好了。你说所有的数据都显示出来了,但不是你希望显示的方式? – 2012-07-15 23:47:07

+0

@MichaelGraczyk是的,它解析正确,但没有正确显示,因为数据被添加到列表后的图像作为单独的对象,而不是与(图像+名称+描述)的对象 – user1502412 2012-07-16 00:29:52

回答

0

如果我理解正确的问题,这应该做你想做的:

XDocument streamFeed = XDocument.Load(new StringReader(response.Content)); 
var query = 
    from sticker in streamFeed.Root.Elements("sticker") 
    let imageData = sticker.Element("imageData") 
    select new Stickers 
    { 
     name = (string)sticker.Element("name"), 
     description = (string)sticker.Element("description"), 
     image = (string)imageData.Element("baseImageUrl") + "huge" + (string)imageData.Element("imageUrlSuffix") 
    }; 

stickersListBox.ItemsSource = query; 
+0

感谢您的及时响应!该代码没有提供任何错误,但数据不显示(可能为空)。我对代码streamFeed.Descendants(“sticker”)做了一些小修改,而不是root,它返回名称和描述的数据,但是返回空引用的图像异常。 – user1502412 2012-07-16 00:23:33

+0

您是否在问题中发布完整的XML?我使用元素而不是后代,因为它更有效率,但它需要你知道文档的确切结构 – 2012-07-16 00:29:53

+0

我编辑了我的原始文章的代码,但一些错误可能不相关的代码....谢谢 – user1502412 2012-07-16 00:48:52