使用C#在里面用冒号解析xml标签

时间:2016-06-29 09:19:46

标签: c# android xml xamarin

我在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图像,并且它正常工作。有没有人有过类似的经历,知道我应该把这些括号放进去?感谢

1 个答案:

答案 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");