2016-06-29 31 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