2016-06-29 6 views
0

Ich arbeite in Xamarin auf einem Android-App, die XML-Daten aus dieser Webiste ist Parsen: http://video.cazin.net/rss.php und Listenansicht bevölkert und insbesondere habe ich ein Problem Wert aus diesem Tag bekommen:Parsen von XML-Tags mit Doppelpunkten innen mit C#

<media:thumbnail url="http://video.cazin.net/uploads/thumbs/2d07f1e49-1.jpg" width="480" height="360"/> 

I erstellt Namespace:

xmlNameSpaceManager.AddNamespace("ab", "http://search.yahoo.com/mrss/"); 

und als versuchter Wert von url Attribute zu erhalten:

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; 
       } 

Ich habe auch versucht, so etwas wie diese:

//ab:thumbnail/@url 

aber als ich bekam Wert von nur erstem Bild. Ich bin sicher, dass das Problem hier irgendwo ist, weil ich den gleichen Code parisng Bilder von einem anderen XML-Tag ohne Doppelpunkt habe und es funktioniert richtig. Hat jemand ähnliche Erfahrung und weiß, was ich in diese Zahnspangen stecken soll? Danke

Antwort

0

Ihre aktuelle Abfrage sucht nach einem thumbnail Element, wobei das url Attribut gleich http://video.cazin.net/rss.php ist - es gibt keine, die diesem entsprechen.

Ihre 'Ich habe auch versucht' Abfrage von //ab:thumbnail/@url ist näher, aber die // bedeutet, dass die Abfrage von der Wurzel des Dokuments beginnt, so erhalten Sie alle URLs (aber Sie nehmen nur die erste).

Wenn das Element verwendet werden soll, das dem aktuellen Knotenkontext entspricht, müssen Sie den aktuellen Knotenkontext in die Abfrage einschließen. Dies wird durch . dargestellt. So würde .//ab:thumbnail/@url alle url Attribute in einem thumbnail Element finden, das vom aktuellen Knoten enthalten wird. Sie können das Ergebnis in this fiddle sehen.

Ich würde Ihnen dringend empfehlen, stattdessen LINQ to XML zu verwenden. Es ist viel schöner, mit der alten XmlDocument API zu arbeiten. Zum Beispiel könnten Sie alle Artikel Thumbnail-URLs mit diesem Code finden:

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

Wenn etwas nicht funktioniert nur wegen winzig kleinen Punkt. Vielen vielen Dank, Sir. Nächstes Mal werde ich LINQ to XML verwenden. – Yupi