/ / Convalida XML con più XSD in Java - java, xml, validation, xsd, sax

Convalida XML con più XSD in Java - java, xml, validation, xsd, sax

Voglio analizzare un file XML con Java e convalidarlo nello stesso passaggio su uno schema XSD. Un file XML può contenere contenuti di diversi schemi, come questo:

<outer xmlns="my.outer.namespace" xmlns:x="my.third.namespace">
<foo>hello</foo>
<inner xmlns="my.inner.namespace">
<bar x:id="bar">world</bar>
</inner>
</outer>

Dato uno spazio dei nomi, è possibile fornire il file xsd corrispondente, ma gli spazi dei nomi utilizzati non sono noti prima dell'analisi. Se uno schema definisce i valori predefiniti per gli attributi, voglio anche saperlo in qualche modo.

Sono stato in grado di convalidare un file se gli schemi lo sononoto, sono stato in grado di analizzare un file senza convalida e ho implementato un LSResourceResolver. Tuttavia, non riesco a far funzionare tutto insieme. Come devo impostare il mio parser (SAX)?

risposte:

5 per risposta № 1

Chi ha mai progettato l'API XML Java deve aver usato droghe ...

public void parseAndValidate(File xmlFile, ContentHandler handler) {
SchemaFactory schemaFactory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
schemaFactory.setResourceResolver(new MySchemaResolver());
Schema schema = schemaFactory.newSchema();

Validator v = schema.newValidator();
v.setResourceResolver(schemaFactory.getResourceResolver());

InputSource is = new InputSource(new FileInputStream(xmlFile));
v.validate(new SAXSource(is), new SAXResult(handler));
}