2010-03-16 19 views
0

Je souhaite charger un document XML dans Xerces-C++ (version 2.8, sous Linux) et le valider à l'aide d'un schéma DTD non référencé à partir du document. J'ai essayé les éléments suivants:Validation d'un document dans Xerces C++

XercesDOMParser parser; 
parser.loadGrammar("grammar.dtd", Grammar::DTDGrammarType); 
parser.setValidationScheme(XercesDOMParser::Val_Always); 
parser.parse("xmlfile.xml"); 

Mais cela ne signifie pas une erreur si le document est pas valide. Qu'est-ce que je rate?

Répondre

2

Vous aurez besoin de set an error handler avant d'appeler Parse si vous voulez voir quoi que ce soit:

Handler handler;  
parser.setErrorHandler(&handler); 

où Handler est une classe dérivée de ErrorHandler

+0

J'ai ajouté le gestionnaire d'erreurs au code. Maintenant, le rapport d'erreurs fonctionne. Cependant, lors de l'analyse de mon fichier DTD, j'obtiens une erreur. Voici mon fichier DTD: !! Le message d'erreur : erreur fatale: grammar.dtd: 2,3: Attendu une déclaration de balisage – petersohn

+0

@petersohn: votre DTD ne spécifie pas quel type d'attribut attr1 est [valeur | OBLIGATOIRE | IMPLICITE | FIXE] et ne semble pas avoir la fin]> , vous pouvez essayer d'intégrer votre gra mmar.dtd dans xmlfile.xml et ouvrez le fichier XML avec XMLNotepad ou similaire. –

+0

La DTD a une fin, j'ai juste oublié de copier-coller ici. Quoi qu'il en soit, ajouter #REQUIRED à attr1 n'aide pas, il donne le même message d'erreur. J'ai une raison particulière de ne pas inclure la DTD dans le fichier XML. Est-il impossible de lier la DTD au XML par programmation? – petersohn