Bonjour à tous,
je cherche à valider un document XML sans déclaration de type (ni DTD ni schéma) avec une DTD que je charge dynamiquement.
Exemple :
je reçois les données suivantes :
et je souhaite savoir si le document est conforme à une DTD contenue dans un fichier "toto.dtd".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5<?xml version="1.0"?> <root> <elm></elm> </root>
Voici le code que j'ai testé :
où CustomErrorHandler est une classe comptant juste les erreurs rencontrées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 XercesDOMParser* parser = new XercesDOMParser; parser->setDoValidation( true ) ; parser->setValidationScheme(XercesDOMParser::Val_Always); Grammar* grammar = parser->loadGrammar("path/to/toto.dtd",Grammar::DTDGrammarType,true); parser->useCachedGrammarInParse(true); CustomErrorHandler* handler = new CustomErrorHandler; parser->setErrorHandler(handler); try { parser->parse(_T("document.xml")); } catch (SAXParseException& e) { //error handling }
Mais ce code échoue avec l'erreur suivante :
Unknown element 'root'.
Celui-ci fait pourtant bien partie de la DTD.
Voici ma question :
* quelqu'un connaît-il un moyen simple d'arriver à mes fins ?
Merci à tous.
ps : c'est aussi valable avec un schéma plutôt qu'une DTD
ps : si vous avez la solution en Java, je prend aussi !
Partager