Nachdem ich nach dem besten Ansatz zur Validierung meiner XML-Datei gegen eine XSD gesucht hatte, stieß ich auf java.xml.validator.
Ich begann mit dem Beispielcode aus der API und fügte meinen eigenen ErrorHandler
hinzu %Vor%Das funktioniert gut, aber die Nachricht, die an meinen XsdValidationErrorHandler übergeben wird, gibt mir keinen Hinweis darauf, wo genau im Dokument das problematische XML ist:
%Vor%Gibt es eine Möglichkeit für mich, einen anderen Abschnitt von Validator zu überschreiben oder zu verbinden, sodass ich meine eigenen Fehlermeldungen definieren kann, die an den ErrorHandler gesendet werden, ohne den gesamten Code neu schreiben zu müssen?
Sollte ich eine andere Bibliothek verwenden?
Versuchen Sie SaxParseException abzufangen, es ist ein Nachkomme von SaxException. Wenn Sie eine davon erhalten, hat sie Methoden getLineNumber (), getColumnNumber () usw.
Bestätigen Sie zum Zeitpunkt der Analyse. Dadurch werden die Standortinformationen verfügbar und der ErrorHandler meldet es.
Erstellen Sie einfach den Schema
, bevor Sie den DocumentBuilderFactory
erstellen, und wenden Sie ihn wie folgt an:
Hinweis: Die Methode setValidating()
teilt dem DBF mit, ob die DTD-Validierung verwendet werden soll oder nicht. Durch das Festlegen des Schemas wird festgelegt, dass die Schemaüberprüfung verwendet werden soll.
Sie können exception.getLineNumber()
und exception.getColumnNumber()
ausführen, um die Fehlerkoordinaten zu ermitteln. This ist eine ähnliche Frage.
Haben Sie sich SAXParseException angesehen? Ich nehme an, Sie suchen nach Informationen wie der Zeile Nummer ? Wie @parcifel erwähnt, sollten Sie beim Parsen validieren (effizientere und bessere Fehlerinformationen). Sie würden dies tun, indem Sie das Schema in der DocumentBuilderFactory angeben .
Diese Informationen sind auch hilfreich
Wie man mit der Internalisierung beginnt Validierungsnachrichten des SAX XML Schema Validators?
Tags und Links java xml xsd validation