标签:linq-to-xml c
我正在尝试编写Linq2XML查询来查询以下XML.我需要它来拉回给定GalleryID的所有照片.
<Albums>
<Album GalleryId="1" Cover="AlbumCover1.jpg" Title="Album 1">
<Photos>
<Photo Title="Image1" URL="img1.jpg" DateAdded="01/01/2010 09:20"/>
<Photo Title="Image2" URL="img2.jpg" DateAdded="01/01/2010 09:20"/>
<Photo Title="Image3" URL="img3.jpg" DateAdded="01/01/2010 09:20"/>
</Photos>
</Album>
<Album GalleryId="2" Cover="AlbumCover1.jpg" Title="Album 2">
<Photos>
<Photo Title="Image1" URL="img1.jpg" DateAdded="01/01/2010 09:20"/>
<Photo Title="Image2" URL="img2.jpg" DateAdded="01/01/2010 09:20"/>
</Photos>
</Album>
</Albums>
我想出的最好的是
XDocument xmlDoc = XDocument.Load(GalleryFilePath);
var x = from c in xmlDoc.Descendants("Album")
where int.Parse(c.Attribute("GalleryId").Value) == GalleryId
orderby c.Attribute("Title").Value descending
select new
{
Title = c.Element("Photos").Element("Photo").Attribute("Title").Value,
URL = c.Element("Photos").Element("Photo").Attribute("URL").Value,
DateAdded = c.Element("Photos").Element("Photo").Attribute("DateAdded").Value
};
这什么都不返回,我猜这是因为我告诉它查询Album元素,然后尝试遍历photo元素.关于应该如何做的任何提示?
谢谢
编辑:更新代码以反映答案
解决方法:
将Attribute对象与值混淆是一个常见的错误.您应该使用Attribute(“ x”).Value来检索其值.
尝试以下更正的代码:
XDocument xmlDoc = XDocument.Load(GalleryFilePath);
var x = from c in xmlDoc.Descendants("Photo")
where c.Parent.Parent.Attribute("GalleryId").Value.Equals(GalleryId)
orderby c.Parent.Parent.Attribute("Title").Value descending
select new
{
Title = c.Attribute("Title").Value,
URL = c.Attribute("URL").Value,
DateAdded = c.Attribute("DateAdded").Value
};
[更新]要检索照片列表,我已将from设置为photo元素,将from设置为相册的位置,在提供的示例XML中,相册的位置增加了2级.
标签:linq-to-xml,c 来源: https://codeday.me/bug/20191210/2099418.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。