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
exampleFunc(const char * filename)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 
main(int argc,char ** argv)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