2010-05-13 5 views
1

Je veux analyser un fichier XML avec Java et le valider dans la même étape par rapport à un schéma XSD. Un fichier XML peut contenir le contenu de plusieurs schémas, comme ceci:Validation XML avec plusieurs XSD en Java

<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> 

Étant donné un espace de nom du fichier XSD correspondant peut être fourni, mais les espaces de noms utilisés sont inconnus avant l'analyse syntaxique. Si un schéma définit des valeurs par défaut pour les attributs, je veux également le savoir d'une manière ou d'une autre.

J'ai été capable de valider un fichier si les schémas sont connus, j'ai pu analyser un fichier sans validation et j'ai implémenté un LSResourceResolver. Cependant, je ne peux pas tout faire fonctionner ensemble. Comment dois-je configurer mon analyseur (SAX)?

Répondre

5

Qui a conçu l'API XML Java doit avoir utilisé des médicaments ...

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)); 
}