Xerces C++ : validation et DTD
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 :
Code:
1 2 3 4 5
|
<?xml version="1.0"?>
<root>
<elm></elm>
</root> |
et je souhaite savoir si le document est conforme à une DTD contenue dans un fichier "toto.dtd".
Voici le code que j'ai testé :
Code:
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
} |
où CustomErrorHandler est une classe comptant juste les erreurs rencontrées.
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 !