Home | History | Annotate | Download | only in examples
      1 /**
      2  * section: Parsing
      3  * synopsis: Parse and validate an XML file to a tree and free the result
      4  * purpose: Create a parser context for an XML file, then parse and validate
      5  *          the file, creating a tree, check the validation result
      6  *          and xmlFreeDoc() to free the resulting tree.
      7  * usage: parse2 test2.xml
      8  * test: parse2 test2.xml
      9  * author: Daniel Veillard
     10  * copy: see Copyright for the status of this software.
     11  */
     12 
     13 #include <stdio.h>
     14 #include <libxml/parser.h>
     15 #include <libxml/tree.h>
     16 
     17 /**
     18  * exampleFunc:
     19  * @filename: a filename or an URL
     20  *
     21  * Parse and validate the resource and free the resulting tree
     22  */
     23 static void
     24 exampleFunc(const char *filename) {
     25     xmlParserCtxtPtr ctxt; /* the parser context */
     26     xmlDocPtr doc; /* the resulting document tree */
     27 
     28     /* create a parser context */
     29     ctxt = xmlNewParserCtxt();
     30     if (ctxt == NULL) {
     31         fprintf(stderr, "Failed to allocate parser context\n");
     32 	return;
     33     }
     34     /* parse the file, activating the DTD validation option */
     35     doc = xmlCtxtReadFile(ctxt, filename, NULL, XML_PARSE_DTDVALID);
     36     /* check if parsing suceeded */
     37     if (doc == NULL) {
     38         fprintf(stderr, "Failed to parse %s\n", filename);
     39     } else {
     40 	/* check if validation suceeded */
     41         if (ctxt->valid == 0)
     42 	    fprintf(stderr, "Failed to validate %s\n", filename);
     43 	/* free up the resulting document */
     44 	xmlFreeDoc(doc);
     45     }
     46     /* free up the parser context */
     47     xmlFreeParserCtxt(ctxt);
     48 }
     49 
     50 int main(int argc, char **argv) {
     51     if (argc != 2)
     52         return(1);
     53 
     54     /*
     55      * this initialize the library and check potential ABI mismatches
     56      * between the version it was compiled for and the actual shared
     57      * library used.
     58      */
     59     LIBXML_TEST_VERSION
     60 
     61     exampleFunc(argv[1]);
     62 
     63     /*
     64      * Cleanup function for the XML library.
     65      */
     66     xmlCleanupParser();
     67     /*
     68      * this is to debug memory for regression tests
     69      */
     70     xmlMemoryDump();
     71     return(0);
     72 }
     73