2009-11-11 3 views
1

Je crée un document XML en utilisant DocumentBuilderFactory et la classe Document de w3c.org. Je veux valider la structure résultante contre un XSD avant de l'écrire dans un fichier. Je sais que je peux configurer DocumentBuilderFactory pour qu'il soit validé lors de sa création mais je préférerais ne pas le faire car je fais d'autres choses avec.Existe-t-il un moyen de valider un arbre XML DOM en mémoire en Java?

Merci.

Répondre

3

Il semble que le package javax.xml.validation dispose des fonctionnalités souhaitées. Si vous avez votre document chargé dans une variable nommée le document déjà, cela devrait faire l'affaire:

// create a SchemaFactory capable of understanding WXS schemas 
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 

// load a WXS schema, represented by a Schema instance 
Source schemaFile = new StreamSource(new File("mySchema.xsd")); 
Schema schema = factory.newSchema(schemaFile); 

// create a Validator instance, which can be used to validate an instance document 
Validator validator = schema.newValidator(); 

// validate the DOM tree 
try { 
    validator.validate(new DOMSource(document)); 
} catch (SAXException e) { 
    // instance document is invalid! 
} 

A partir de cette page:

http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/validation/package-summary.html

+0

Lorsque vous essayez de mettre en œuvre, mon compilateur est impossible de résoudre XMLConstants.W3C_XML_SCHEMA_NS_URI. J'utilise Java 1.6 et la documentation dit qu'il devrait être là, mais je ne le vois pas comme faisant partie de la classe javax.xml.XMLConstants. Pensées? – Casey

+0

Tout ce que je peux penser est de s'assurer que vous importez javax.xml.XMLConstants. Il y a d'autres XMLConstants que mon EDI a suggéré, mais ils ne fonctionnent pas. –

+0

Je l'ai fait. Il n'y a qu'une seule autre option que cela donne et ce n'est certainement pas la bonne. Je viens de remplacer la constante par l'url que la documentation donne. – Casey