Gnou

Le Blog de Thomas

Logiciels libres, informatique et autres ...

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.
Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]