Ich habe eine XML-Datei mit Jaxb erstellt. Ich muss es gegen ein xsd-Dokument validieren. Ist es möglich, einfach eine Validierung durchzuführen, ohne das Programm zu munmarsieren? Ich muss dann die Fehler in der XML-Datei drucken.Validate XML erstellt mit Jaxb gegen eine Xsd-Datei
Antwort
Ja, Sie können Validator in Java von 1.5 gefunden. Hier ist die Referenz doc
Abgesehen davon können Sie Dom-basierte oder Stream-basierte API verwenden, um Ihr XML-Dokument gegen Xsd-Datei zu überprüfen. Wenn Sie SAX API für Ihre Aufgabe verwenden, dann hören ist das Beispiel:
try {
String schemaLang = "http://www.w3.org/2001/XMLSchema";
SchemaFactory factory = SchemaFactory.newInstance(schemaLang);
Schema schema = factory.newSchema(new StreamSource("sample.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StreamSource("test.xml"));
} catch (SAXException e) {
System.out.println(" sax exception :" + e.getMessage());
} catch (Exception ex) {
System.out.println("excep :" + ex.getMessage());
}
Ansonsten können Sie verwenden, DOM, DOM4J oder XOM-API. Für weitere Referenz sehen Sie here.
Es gibt eine verwandte answer in stackoverflow auch.
Sie können auch vor dem Marshalling validieren: JAXBSource-Quelle = neue JAXBSource (jaxbContext, objectBeingMarshalled); \t \t validator.validate (Quelle); – Ritesh
Ich bekomme diese Exception Sax Ausnahme: Die Verarbeitung Anweisung Ziel Übereinstimmung "[xX] [mM] [lL]" ist nicht erlaubt. – AutoMEta
bedeutet dies, dass in Ihrem XML-Startplatz etwas Platz vorhanden ist, Leerzeichen oder etwas anderes zu Beginn Ihrer XML-Datei entfernt wird. Folgen Sie dem Link: http: //gonithethinker.blogspot.com/2012/06/processing-instruction-target-matching .html @AutoMeta – Forhad
Einer der Hauptvorteile des Generierens eines Bindungscodes aus xsd und des anschließenden Verwendens des Codes zum Erstellen eines Instanz-XML ist die Ausgabe eines gültigen und wohlgeformten XML. Ich bin mir nicht sicher, warum Sie es erneut validieren möchten? –
Sie können Schema und ValidationEventHandler für den Marshaller selbst festlegen. Es wird beim Marshalling gegen das Schema validiert. Siehe http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html#setSchema(javax.xml.validation.Schema) – Ritesh