2016-06-29 83 views
0

我在Xamarin工作的一个Android应用程序是从该网站的XML解析:http://video.cazin.net/rss.php,并填充列表视图,尤其是我从这个标签中获得价值的一个问题:解析XML标签用冒号内使用C#

<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

您当前的查询正在搜索thumbnail元素,其中url属性等于http://video.cazin.net/rss.php - 没有与此匹配的元素。

您的'我也试过'查询//ab:thumbnail/@url更接近,但//意味着查询将从文档的根目录开始,因此您可以获取所有的URL(但您只能获取第一个)。

如果您想要考虑与当前节点上下文相匹配的元素,则需要在查询中包含当前节点上下文 - 这由.表示。因此.//ab:thumbnail/@url会在当前节点包含的thumbnail元素中查找所有url属性。您可以在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"); 
+0

当某件事情因为小小的点而不起作用时。先生,谢谢你。下次我将使用LINQ to XML。 – Yupi