Verwendung von xmllint und xpath mit einem nicht perfekten HTML-Dokument?

8

Ich habe eine HTML-Seite, die von einem vorhandenen Werkzeug generiert wird - ich kann die Ausgabe dieses Werkzeugs nicht ändern.

Ich möchte jedoch xmllint mit der Option --xpath verwenden, um einige spezifische Informationen aus der heruntergeladenen Webseite auszuwählen. Das Problem ist, dass die Seite mit folgendem beginnt:

<html lang=en><head>...

Und xmllint wirft Fehler fast sofort:

%Vor%

Das Problem scheint sicherlich die fehlenden umschließenden Anführungszeichen um den Wert des Attributs lang zu sein. Die ganze Seite ist voll von dieser Art von Problem. (Obwohl nur sporadisch.)

Fast jeder Browser kann das gut parsen - wie kann ich auch xmllint davon überzeugen? Ich möchte vermeiden, einen Zwischenschritt zu machen, um die Datei zu "reparieren". Stattdessen möchte ich entweder:

1) Suchen Sie nach einem Flag, einer Validierungsoption usw., die dem Parser hilft, oder:

2) Verwenden Sie ein anderes Werkzeug. (Aber was?% Co_de% ist immer mein Einstiegspunkt für XPath-Befehle in der Befehlszeile.)

Außerdem führt die Verwendung von xmllint zu:

%Vor%     
Craig Otis 31.01.2014, 12:14
quelle

3 Antworten

12

Sie können den HTML-Parser in xmllint mit der Befehlszeilenoption --html aktivieren. Auf diese Weise können Sie HTML-Dokumente verarbeiten.

    
Stefano Sanfilippo 31.01.2014, 12:26
quelle
4

Sie sollten den HTML-Code mit einem milden Parser vorverarbeiten. (Das ist der Hauptunterschied: HTML ist eine viel lockerere Syntax als XML erlaubt.) Versuchen Sie HTML5-Tidy und lassen Sie XMLLint an dem Ergebnis arbeiten:

%Vor%     
Boldewyn 31.01.2014 12:26
quelle
4

Wenn die Analyse nicht abgebrochen wird, können Sie die Fehler einfach mit:

ausblenden %Vor%

Dann gibt es Xidel , das ich nur für die Auswahl einiger Daten aus HTML-Seiten erstellt habe. (Obwohl es nicht perfekt ist. Ich wurde über zwei missgebildete Dokumente, die es nicht behandeln konnte, erzählt)

%Vor%     
BeniBela 31.01.2014 12:33
quelle

Tags und Links