2015-12-21 64 views
-1

我是新来的,我的英语不好,所以这是我的问题 image读取XML使用LINQ不能得到所有节点

所以,它只是显示的姓名,性别和第一张图像。 如何让所有的图像

+1

欢迎来到Stack Overflow。以纯文本的形式分享您的代码。并请阅读[常见问题],[问]和[帮助]作为开始.. –

+2

欢迎来到SO :)。请尝试将所有相关材料放置在您的问题中,因为很难来回检查我们有什么问题等等。因此,请将您图像中包含的所有内容复制并粘贴到您的帖子中。谢谢 – Christos

回答

3

您需要使用Descendants()方法,让您的info元素和(我认为)FirstOrDefault()方法获取一张照片:

var xml = XDocument.Load(@"details.xml"); 
var obj = (from info in xml.Descendants("info") 
      let name = info.Element("name").Value 
      let picture = info.Descendants("image").FirstOrDefault() 
      where name == value 
      select new detail 
      { 
       Name = name, 
       Gender = info.Element("gender").Value, 
       Image = picture != null? picture.Value : null 
      }).ToList(); 

编辑1

要获取所有需要进行以下更改的图像:

在类detail中更改的类型财产

public IEnumerable<string> Images{ get; set; } 

在加载数据下面的代码:

var obj = (from info in xml.Descendants("info") 
      let name = info.Element("name").Value 
      let images = info.Descendants("image") 
      where name == value 
      select new detail 
      { 
       Name = name, 
       Gender = info.Element("gender").Value, 
       Images = images.Select(elem => elem.Value) 
      }).ToList(); 

最后但并非最不重要的,改变XAML来显示图像的集合,并将其绑定到detail类的Images财产。

编辑2

要在XAML中显示的图像的集合改变Image标签有以下:

<ItemsControl ItemsSource = {Binding Images}> 
    <ItemsControl.ItemTemplate> 
     <Image Source = {Binding .}></Image> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

我没有测试过它,所以它可能需要一些调整,正常工作,但这应该足以为您指出正确的方向。

新年快乐!

+0

谢谢你回答我,但只显示第一张图片。如何获得所有图像 – abcd1234

+0

@ abcd1234,对于迟到的评论抱歉我是AFK。请看最新的编辑。 – RePierre

+0

@ RePierre - 我关注你,但图片不显示。我不明白“更改xaml以显示图像集合并将其绑定到详细信息类的Images属性”。谢谢您的帮助 – abcd1234