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