/ libxml2 / doc / examples / parse2.c
parse2.c
 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  }