probleme validation dtd

probleme validation dtd - XML/XSL - Programmation

Marsh Posté le 20-02-2006 à 02:09:01    

salut a tous,
 
je savais trop ou poster cette question, s'il fallait la mettre en C, ou dans la sous categorie xml, donc je l'ai mise ici.
 
voila mon probleme en deux mots:
 
j'essaye d'inclure une validation dtd dans un programme que je fait, j'ai fait des tests avec des xml et dtd tres simple, et la libxml2 semble etre fachee avec ce que je lui envoi...
 
je vous met les exemples qui seront surement plus clairs.
 
Ici il faut voir que le fichier est valide lorsque je le passe dans les binaires de la libxml....
$ xmllint --valid file.xml  
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "toto.dtd">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend</body>
</note>
$
 
et que la, avec mon programme, ca ne passe pas....
$ ./dtd file.xml file.dtd
Document not parsed successfully
$
 
Alors que le code est tout ce qu'il y a de plus basique.....
int main(int argc, char *argv[])
{
  xmlDocPtr doc;
  xmlDtdPtr dtd;
 
  if (argc != 3)
    return (1);
  doc = xmlParseFile(argv[1]);
  if (doc == NULL )
    {
      fputs("Document not parsed successfully\n", stderr);
      return (1);
    }
  dtd = xmlParseDTD(NULL, (xmlChar *) argv[2]);
  if (dtd == NULL)
    {
      fputs("DTD not parsed successfully\n", stderr);
      return (1);
    }
  if (xmlValidateDtd(NULL, doc, dtd) == 0)
    {
      fputs("Invalid document\n", stderr);
      return (1);
    }
  return (0);
}
 
Merci d'avance a ceux qui preteront attention a mon probleme.
 
bye.

Reply

Marsh Posté le 20-02-2006 à 02:09:01   

Reply

Marsh Posté le 20-02-2006 à 08:43:30    

bon bah a croire que la nuit porte conseil, je viens de resoudre mon probleme.
 
pour ceux qui sont interesses par la solution, il s'agissait tout simplement de remplir tout les parametres de xmlValidateDtd correctements, a savoir dans mon cas de lui passer aussi un `context` a la place de NULL.
 
voici le code corriges pour ceux qui veulent:
 
#include "stdio.h"
#include <libxml/parser.h>
 
int main(int argc, char *argv[])
{
  xmlDocPtr  doc;
  xmlDtdPtr  dtd;
  xmlValidCtxtPtr ctxt;
 
  if (argc != 3)
    return (1);
  doc = xmlParseFile(argv[1]);
  if (doc == NULL )
    {
      fputs("Document not parsed successfully\n", stderr);
      return (1);
    }
  dtd = xmlParseDTD(NULL, (xmlChar *) argv[2]);
  if (dtd == NULL)
    {
      fputs("DTD not parsed successfully\n", stderr);
      return (1);
    }
  ctxt = xmlNewValidCtxt();
  if (ctxt == NULL)
    {
      fputs("Ctxt not created sucessfully\n", stderr);
      return (1);
    }
  if (xmlValidateDtd(ctxt, doc, dtd) == 0)
    {
      fputs("Invalid document\n", stderr);
      return (1);
    }
  puts("Document validated" );
  return (0);
}

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed