libxml2 et validation par DTD
Dans le cadre du projet
KOS, nous utilisons la librairie
libxml2 pour générer à partir de fichiers XML divers codes sources C. Celà se fait de manière très simple grâce à l'API DOM (Document Object Model).
Un point intéressant est que
libxml2 permet de valider un document XML par rapport à une
DTD. Ainsi, la structure du document XML peut facilement être validée.
Grossièrement (sans le test des erreurs), voilà comment valider un document XML. Le programme prend en premier argument le document XML, en deuxième argument la DTD.
#include <libxml/tree.h>
#include <libxml/xpath.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
xmlDocPtr xmldoc;
xmlDtdPtr dtd;
xmlValidCtxtPtr ctxt;
int valid;
xmldoc = xmlParseFile (argv[1]);
if (!xmldoc) { }
dtd = xmlParseDTD(NULL, argv[2]);
if (!dtd) { }
ctxt = xmlNewValidCtxt();
if(!ctxt) { }
valid = xmlValidateDtd(ctxt, xmldoc, dtd);
xmlFreeParserCtxt(ctxt);
printf("Le document est %s\n", (valid == 1) ? "valide" : "invalide");
return 0;
}
Toute l'API de
libxml2 est décrite sur
http://www.xmlsoft.org/html/libxml-parser.html, à regarder de près si vous voulez analyser du XML. A noter également qu'on peut utiliser
libxml2 depuis d'autres langages que du C.