使用c#解析带有冒号的xml标签

本文关键字:xml 标签 使用 | 更新日期: 2023-09-27 17:52:55

我在Xamarin工作在一个android应用程序这是从这个网站解析xml: http://video.cazin.net/rss.php,并填充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标签没有冒号的图像,它的工作正常。有没有人有类似的经历,知道我应该在牙套里放什么?由于

使用c#解析带有冒号的xml标签

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

您的"我也尝试过"//ab:thumbnail/@url的查询更接近,但//意味着查询将从文档的根开始,因此您获得所有url(但您只采取第一个)。

如果您希望匹配的元素考虑到当前节点上下文,则需要在查询中包含当前节点上下文—这由.表示。因此,.//ab:thumbnail/@url将在当前节点包含的thumbnail元素中找到所有url属性。您可以在下面查看结果。

但是,我强烈建议您使用LINQ to XML。它比旧的XmlDocument API好用得多。例如,您可以使用以下代码查找所有项目缩略图url:
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");