3 Stimmen

Fehler beim Laden von RSS XML: Element 'channel' mit Namensraum '' wurde nicht gefunden.

Ich habe hier eine Ausnahme

var stream = e.Result;
var response = XmlReader.Create(stream);
var feeds = SyndicationFeed.Load(response); // HIER IST ES

Die Ausnahme

Element 'channel' mit Namespace-Name '' wurde nicht gefunden. Zeile 8, Position 2.

RSS sieht so aus:

   News
 http://www.samsung.com/us News
 ...

http://validator.w3.org/feed/ sagt, dass "Dies ein gültiger RSS-Feed ist." (Sie können es hier überprüfen http://validator.w3.org/feed/check.cgi?url=http%3A%2F%2Fwww.samsung.com%2Fus%2Ffunction%2Frss%2FrssFeedItemList.do%3FctgryCd%3D101%26typeCd%3DNEWS)

Also habe ich keine Ahnung, was passiert... :(

Können wir eine Lösung finden, um einige der Validierungsnachrichten der SyndicationFeed-Klasse zu unterdrücken?

Vielen Dank für IRGENDEINE Lösung, die es mir ermöglicht, diese Ausnahme zu vergessen!

4voto

Michael Punkte 1274

Wenn Sie sich die Ergebnisse der von Ihnen aufgelisteten W3-Validierung ansehen, steht dort:

Zeile 8, Spalte 0: Nicht dokumentierte Verwendung von atom:link 

Das Platzieren des atom:link-Elements vor dem Kanal-Element führt dazu, dass die Klasse SyndicationFeed beim Laden fehlschlägt. Sie können dies selbst testen, indem Sie den RSS-Feed-XML lokal herunterladen, die atom:link-Zeile entfernen/kommentieren und Ihren Code erneut ausführen. Ohne diese Zeile wird das XML geladen und die Feeds werden gefunden. Dies ist schon einmal mit der Klasse SyndicationFeed passiert.

1voto

Emperor XLII Punkte 12434

Dank Michaels Antwort konnte ich das problematische XML (das nicht unter meiner Kontrolle liegt) vorverarbeiten, um fehlerhafte atom:link-Elemente zu verschieben:

private static readonly XName AtomLink = XName.Get( "link", "http://www.w3.org/2005/Atom" );
private static readonly XName Channel = XName.Get( "channel" );

...
var document = XDocument.Load( stream );
var channel = document.Root.Element( Channel );
foreach( var misplacedLink in document.Root.Elements( AtomLink ) ) {
    misplacedLink.Remove( );
    channel.Add( misplacedLink );
}

using( var reader = document.CreateReader( ) )
    return SyndicationFeed.Load( reader );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X