我在Xamarin的一个Android应用程序上工作,该应用程序正在解析此网站上的xml:Task.Run(Func),并填充listview,特别是我从此标记获取值时遇到问题:
<media:thumbnail url="http://video.cazin.net/uploads/thumbs/2d07f1e49-1.jpg" width="480" height="360"/>
我创建了名称空间:
xmlNameSpaceManager.AddNamespace("ab", "http://search.yahoo.com/mrss/");
并尝试从url属性获取值:
XmlNodeList xmlNode = document.SelectNodes("rss/channel/item");
if (xmlNode[i].SelectSingleNode("//ab:thumbnail[@url='http://video.cazin.net/rss.php']", xmlNameSpaceManager) != null)
{
var thumbnail = xmlNode[i].SelectSingleNode("//ab:thumbnail=[@url='http://video.cazin.net/rss.php']", xmlNameSpaceManager);
feedItem.Thumbnail = thumbnail.Value;
}
我也试过这样的事情:
//ab:thumbnail/@url
但是我得到的只是第一张图片的价值。我确定这个问题出在某处,因为我从另一个没有冒号的xml标签中获得了相同的代码parisng图像,并且它正常工作。有没有人有过类似的经历,知道我应该把这些括号放进去?感谢
答案 0 :(得分:0)
您当前的查询正在搜索thumbnail
元素,其中url
属性等于http://video.cazin.net/rss.php
- 没有任何内容与此匹配。
你的'我也尝试过&#39; //ab:thumbnail/@url
的查询更接近,但//
表示查询将从文档的根开始,因此您获得所有网址(但您只接受第一个)。
如果您希望考虑匹配当前节点上下文的元素,则需要在查询中包含当前节点上下文 - 这由.
表示。因此,.//ab:thumbnail/@url
会在当前节点包含的url
元素中找到所有thumbnail
个属性。您可以在this fiddle中看到结果。
但我强烈建议您使用LINQ to XML。使用它比使用旧的XmlDocument
API更好。例如,您可以使用以下代码找到所有项目缩略图网址:
var doc = XDocument.Load("http://video.cazin.net/rss.php");
XNamespace media = "http://search.yahoo.com/mrss/";
var thumbnailUrls = doc.Descendants("item")
.Descendants(media + "thumbnail")
.Attributes("url");