2009-06-15 13 views
6

Ich versuche, ein Stück (möglicherweise) fehlerhafte HTML in ein XMLDocument-Objekt zu laden, aber es schlägt mit XMLExceptions ... fehl, da es zusätzliche öffnende/schließende Tags und fehlerhafte XML-Tags wie <img > gibt von <img />Parse missformed XML

Wie bekomme ich die XML-Analyse mit allen Fehlern in den Daten? Gibt es einen XML-Validator, den ich vor dem Parsen anwenden kann, um diese Fehler zu korrigieren? Oder würde das Behandeln der Ausnahme analysieren, was geparst werden kann?

+0

Ich würde gehen für die Behandlung der Ausnahmen und versuchen, wenn Sie eine Vorstellung von den Fehlbildungen haben ... – abmv

+0

Wenn es missgebildet ist, wirft es einen Wutanfall (XMLException) und analysiert es überhaupt nicht! Keine ChildNodes existieren. –

+0

http://stackoverflow.com/questions/28909882/dealing-with-malformed-xml – Sobrique

Antwort

14

Die HTML Agility Pack wird analysieren entworfen html, anstatt xhtml, und ist ziemlich nachsichtig. Das Objektmodell ist bekannt, wenn Sie XmlDocument verwendet haben.

+1

Dies funktionierte wirklich gut auf XML, die einen Baum von Knoten mit fehlenden End-Tags enthielt. Danke für den Vorschlag! –

0

Was Sie versuchen, ist sehr schwierig. HTML kann nicht mit einem XML-Parser analysiert werden, da XML streng ist und HTML nicht. Wenn dieser HTML-Code XHTML-konform wäre (HTML als XML), würde ein XML-Parser den HTML-Code ohne Probleme analysieren.

Sie möchten sehen, ob HTML-zu-XHTML-Konverter da draußen sind, wenn Sie wirklich einen XML-Parser für HTML verwenden möchten.

Mit anderen Worten, ich habe noch einen XML-Parser zu erfüllen, die fehlerhafte XML Griffe ... sie sind nicht zu akzeptieren lose Markup wie HTML (aus gutem Grund, auch :))

2

Sie möchten vielleicht die Antwort auf this question überprüfen.

Grundsätzlich irgendwo zwischen einem .NET-Port von beautifulsoup und dem HTML-Agility-Pack gibt es einen Weg.

1

Es ist unwahrscheinlich, dass Sie in der Lage sein werden, ein XmlDocument mit dieser fehlerhaften Struktur zu erstellen. XmlDocument (nach meinem Wissen) erfordert, dass der XML-Inhalt der korrekten Verschachtelungs- und Verschlusssyntax entspricht.

Sie vermuten jedoch, dass Sie dies stattdessen mit einem XmlReader analysieren könnten. Es kann weiterhin Ausnahmen auslösen, wenn bestimmte schwerwiegende Fehler auftreten, aber gemäß den MSDN-Dokumenten kann es zumindest den Ort der Fehler offenlegen.

Wenn Sie nur mit HTML zu tun haben, gibt es die HTML Agility Pack, die Ihren Zwecken dienen kann.

0

Sie können fehlerhaftes XML nicht in XmlDocument laden.

Schauen Sie sich die Html Agility Pack auf CodePlex

1

ont er spezifischen Bedürfnisse Je, können Sie möglicherweise HTML Tidy zu bereinigen, das Dokument zu verwenden, ist es dann das XMLDocument-Objekt importieren.