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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
}
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 !