Ich habe kürzlich damit begonnen, mit dem HtmlAgilityPack zu experimentieren. Ich bin nicht mit all seinen Möglichkeiten vertraut und denke deshalb mache ich etwas falsch.
Ich habe eine Zeichenfolge mit folgendem Inhalt:
%Vor%Sie sehen, dass ich in meiner Spanne ein "weniger als" Zeichen habe. Ich verarbeite diese Zeichenfolge mit dem folgenden Code:
%Vor%Aber wenn ich einen schnellen und dreckigen Blick in die Spanne mache:
%Vor%Ich sehe, dass der Bereich leer ist.
Welche Option muss ich verwenden, um das 'Kleiner als' Zeichen beizubehalten? Ich habe das schon probiert:
%Vor%aber ohne Erfolg.
Ich weiß, dass es sich um ungültiges HTML handelt. Ich verwende das, um ungültiges HTML zu reparieren und HTMLEncode auf den 'weniger als' Zeichen
zu verwendenBitte weisen Sie mich in die richtige Richtung. Vielen Dank im Voraus
Das Html Agility Packs erkennt dies als einen Fehler und erstellt eine HtmlParseError-Instanz dafür. Sie können alle Fehler mithilfe der ParseErrors der HtmlDocument-Klasse lesen. Also, wenn Sie diesen Code ausführen:
%Vor%Es wird dies angezeigt (der korrigierte Text zuerst und Details über den Fehler dann):
%Vor%Sie können also versuchen, diesen Fehler zu beheben, da Sie alle erforderlichen Informationen (einschließlich Zeilen-, Spalten- und Stream-Position) haben, aber der allgemeine Prozess zum Beheben (nicht Erkennen) von Fehlern in HTML ist sehr komplex.
Wie in einer anderen Antwort erwähnt, war die beste Lösung, die ich gefunden habe, den HTML-Code vorzureichen, um verwaiste <
-Symbole in ihren HTML-codierten Wert <
zu konvertieren.
Korrigieren Sie das Markup, weil Ihre HTML-Zeichenfolge ungültig ist:
%Vor% Obwohl es richtig ist, dass der angegebene HTML-Code ungültig ist, sollte HtmlAgilityPack ihn dennoch parsen können. Es ist kein ungewöhnlicher Fehler im Web, zu vergessen, " <
" zu codieren, und wenn HtmlAgilityPack als Crawler verwendet wird, sollte es einen schlechten HTML-Code erwarten. Ich habe das Beispiel in IE, Chrome und Firefox getestet, und alle zeigen den zusätzlichen <
als Text.
Ich habe die folgende Methode geschrieben, mit der Sie die HTML-Zeichenfolge vorverarbeiten und alle "nicht geschlossenen" '<'
-Zeichen durch "<"
ersetzen können:
Tags und Links html c# html-agility-pack