Validation de xml contre la relaxation en ANSI C

Est-il possible de valider un fichier XML avec un schéma Relax NG en ANSI C? Je suis tombé sur cette bibliothèque appelée libxml2 mais toute l’aide que je pourrais en tirer concerne la manière d’parsingr un fichier XML. S’il vous plaît aider.

Et si cela peut être fait, quelles sont les étapes? Tout à fait ignorants à propos de cet environnement.

Voici un exemple minimaliste (vous devez bien sûr append votre propre vérification d’erreur):

#include  #include  #include  #include  #include  #include  int main(int argc, char *argv[]) { int status; xmlDoc *doc; xmlRelaxNGPtr schema; xmlRelaxNGValidCtxtPtr validctxt; xmlRelaxNGParserCtxtPtr rngparser; doc = xmlParseFile(argv[1]); rngparser = xmlRelaxNGNewParserCtxt(argv[2]); schema = xmlRelaxNGParse(rngparser); validctxt = xmlRelaxNGNewValidCtxt(schema); status = xmlRelaxNGValidateDoc(validctxt, doc); printf("status == %d\n", status); xmlRelaxNGFree(schema); xmlRelaxNGFreeValidCtxt(validctxt); xmlRelaxNGFreeParserCtxt(rngparser); xmlFreeDoc(doc); exit(EXIT_SUCCESS); } 

Comstackz ceci avec gcc -I / usr / include / libxml2 rngval.c -o rngval -lxml2

Vous pouvez consulter la documentation pertinente sur http://xmlsoft.org/html/libxml-relaxng.html

Je ne peux pas vous donner rapidement un exemple de code source pour répondre à votre question, mais les réponses dont vous avez besoin se trouvent dans le source de l’utilitaire xmllint faisant partie de l’utilitaire libxml2. La documentation du développeur pour libxml 2 est abondante à l’adresse http://xmlsoft.org/docs.html et vous pouvez parcourir ou télécharger le code source de xmllint à partir du référentiel GIT . Regardez le code dans la fonction streamFile (autour de la ligne 1800)