Bonjour,

J'utilise Xerces-C++ pour lire des fichiers XML et maintenant je voudrais faire valider mes fichiers avec une DTD. Bon, là j'ai ma DTD, je l'ai testée avec le logiciel xmlspy (en lui donnant un fichier qui ne la respecte pas) ça marche nickel.

Quand je suis passé à Xerces, j'ai lu sur la doc qu'il suffit d'activer l'option "fgSAX2CoreValidation" pour qu'il me fasse la validation. En gros le bout de code ressemble à ça :
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
try
{
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch)
{
char* message = XMLString::transcode(toCatch.getMessage());
fprintf(stderr," erreur, le message d'exception est : %s \n", message);
XMLString::release(&message);
}
SAX2XMLReader* monParser;
if ( (monParser = XMLReaderFactory::createXMLReader()) == (SAX2XMLReader*) NULL)
{
fprintf(stderr," Erreur \n");
exit(EXIT_FAILURE);
}
monParser->setFeature(XMLUni::fgSAX2CoreValidation, true);
 
MySAX2Handler* mySAX2Handler = new MySAX2Handler(this);
 
monParser->setContentHandler(mySAX2Handler);
monParser->setErrorHandler(mySAX2Handler);
 
try
{
monParser->parse(XMLFile);
}
 
catch (const XMLException& toCatch)
{
char* message = XMLString::transcode(toCatch.getMessage());
fprintf(stderr, "erreur analyseur, le message d'exception est : %s \n", message);
XMLString::release(&message);
}
catch (const SAXParseException& toCatch)
{
char* message = XMLString::transcode(toCatch.getMessage());
fprintf(stderr, "erreur analyseur, le message d'exception est : %s \n", message);
XMLString::release(&message);
}
catch (...)
{
fprintf(stderr, "exception innatendue\n");
}
La lecture des fichiers XML marche, par contre la validation DTD pas du tout . Est-ce que j'ai activé correctement la validation DTD ? sinon comment faire ?

Merci d'avance pour votre aide.