So erhalten Sie spezifischere Fehler beim Validieren von XML gegen eine XSD mit java.xml.validator

8

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?

    
Levity 04.09.2012, 17:11
quelle

5 Antworten

9

Versuchen Sie SaxParseException abzufangen, es ist ein Nachkomme von SaxException. Wenn Sie eine davon erhalten, hat sie Methoden getLineNumber (), getColumnNumber () usw.

    
Tony Hopkinson 04.09.2012, 17:21
quelle
3

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:

%Vor%

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.

    
parsifal 04.09.2012 17:15
quelle
3

Sie können exception.getLineNumber() und exception.getColumnNumber() ausführen, um die Fehlerkoordinaten zu ermitteln. This ist eine ähnliche Frage.

    
dimitrisli 05.09.2012 12:50
quelle
1

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 .

    
jtahlborn 04.09.2012 17:14
quelle

Tags und Links