Bonjour,
Disposant d'un document org.w3c.dom.Document, existe-il un moyen de valider le document XML qui peut en résulter avant de le créer?
Bonjour,
Disposant d'un document org.w3c.dom.Document, existe-il un moyen de valider le document XML qui peut en résulter avant de le créer?
J'ai ça, si ça peut aider (validation d'un fichier xml sous forme de java.util.File contre le xsd spécifié dans son code) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 /** * Validate the given XML file against its associated schema (xsd). * * @param xmlFile The file to be validated * @throws XmlValidationException If the file don't validate * @throws IOException */ public static void validateBySchema(File xmlFile) throws XmlValidationException, IOException { if (xmlFile == null) { throw new NullPointerException("xmlFile cannot be null"); } SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser"); builder.setValidation(true); BestSaxChecker bsc = new BestSaxChecker(); builder.setErrorHandler(bsc); builder.setFeature("http://apache.org/xml/features/validation/schema", true); // command line should offer URIs or file names try { builder.build(xmlFile); if (!bsc.validate()) { // Validation against the schema throw new XmlValidationException(bsc.getErrorList()); } } catch (JDOMException e) { // Indicates a well-formedness error String xmlAbsPath = (File.separator.equals("\\") ? xmlFile.getAbsolutePath().replaceAll("\\\\", "\\\\\\\\") : xmlFile.getAbsolutePath()); throw new XmlValidationException(e, XmlI18n.getText(XmlI18n.KEY_VALIDATION_WELLFORMEDNESS_ERROR, xmlAbsPath)); } }
natha:
Merci pour ta réponse, mais le problème est que ta solution nécessite que le doument XML existe déjà, et qu'il soit ouvert avec:par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part File xmlFile = new File(xmlFilePath)
Alors que moi je ne dispose pas encore du document XML. ce dont je dispose c'est l'instance de org.w3c.dom.Document et d'un Schéma XML. Alors au lieu de sérialiser cette instance pour obtenir le fichier xml correspondant, puis le valider, j'aurai souhaité d'abord testé s'il est valide à partir de l'instance de org.w3c.dom.Document.
Jamais fait, désolé.
Celà dit écrire le fichier temporairement pour le valider ne devrait pas poser autrement de problème si ?
non, cela ne devrait as causer de problèmes. d'ailleurs, je pense que c'est ce que je vais faire.
Merci
Euh juste, le BestSaxChecker est une classe à moi qui implémente ErrorHandler. Tu peux faire l'implémentation que tu veux.
Un exemple sur Koders
La XmlValidationException est une Exception à moi. Je te laisse adapter également.
Partager