(root)/
libxml2-2.12.3/
doc/
examples/
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 succeeded */
      37      if (doc == NULL) {
      38          fprintf(stderr, "Failed to parse %s\n", filename);
      39      } else {
      40  	/* check if validation succeeded */
      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      return(0);
      64  }