Kann nicht geschlossenes Element in XML nicht finden

8

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.

    
itzy 03.04.2011, 23:57
quelle

4 Antworten

7

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.

    
Bala R 04.04.2011, 00:03
quelle
3

Ich habe gerade eine XML-Datei in VS 2010 (mit ReSharper) geöffnet, brach die XML und was weißt du? Der Fehler wurde sofort hervorgehoben. Wenn Sie Zugriff auf das gleiche haben, ist es so einfach.

    
Jon 04.04.2011 00:03
quelle
3

xmllint ist ein Standardwerkzeug dafür. Aus der Validierung & amp; DTDs Seite:

  

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:

%Vor%
  

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.

    
the Tin Man 04.04.2011 00:03
quelle
0

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.

    
ThomasRS 04.04.2011 00:20
quelle

Tags und Links