Ich habe eine große XML-Datei (~ 18MB). Anscheinend ist irgendwo ein Etikett, das nicht geschlossen ist. Ich weiß das, weil, wenn ich das W3C Markup-Validierungs-Tool (validator.w3.org) ausgeführt habe, bekomme ich den folgenden Fehler:
You may have neglected to close an element, or perhaps you meant to "self-close" an element, that is, ending it with "/>" instead of ">".
Meine Frage lautet, wie ich dieses fehlende geschlossene Element unter den 500.000 Zeilen in der Datei finden könnte. Gibt es ein Werkzeug, das ich verwenden könnte, das Orte vorschlagen würde, wo es ein Problem geben könnte - wie ein Element, das nach einer bestimmten Anzahl von Zeilen nicht geschlossen wurde?
Irgendwelche Ideen würden sehr geschätzt werden.
Ich benutze Notepad ++ , das über ein ausgezeichnetes XML-Tools-Plugin verfügt, mit dem Sie die XML-Syntax überprüfen und in die entsprechende Zeile verzweigen können problematisch. Es hat auch nützliche Dienstprogramme.
xmllint
ist ein Standardwerkzeug dafür. Aus der Validierung & amp; DTDs Seite:
%Vor%Der einfachste Weg besteht darin, das in libxml enthaltene Programm xmllint zu verwenden. Die Option --valid aktiviert die Validierung der als Eingabe angegebenen Dateien. Im Folgenden wird beispielsweise eine Kopie der ersten Revision der XML 1.0-Spezifikation validiert:
Das - noout wird verwendet, um die Ausgabe des resultierenden Baums zu deaktivieren.
Das --dtdvalid dtd erlaubt die Validierung der Dokumente gegen eine gegebene DTD.
Libxml2 exportiert eine API, um DTDs und Validierung zu behandeln, überprüfen Sie die zugehörige Beschreibung.
Wenn Ihr Dokument nicht "hübsch gedruckt" ist, kann es immer noch schwierig sein, den problematischen Knoten zu finden. Sie könnten also xmllint verwenden, um die einzurückende Datei neu zu schreiben.
Da Sie kein XML-Schema haben, gibt es keine narrensichere Möglichkeit, den fehlerhaften Code zu finden, z. B. erlaubt XML rekursive Strukturen. Aber Sie können Ihr eigenes XML-Schema schreiben, obwohl das möglicherweise eine Menge zu lernen ist. Alternativ dazu würde ich einen einfachen, dummen Validierer der Knotenebene und des Elementnamens erstellen:
%Vor%Alternativ können Sie das gesamte Dokument innerhalb der obigen do-while-Schleife analysieren und Prüfungen wie
durchführen %Vor%Es ist scheiße, aber es funktioniert.
Tags und Links xml