xref: /aosp_15_r20/external/libxml2/example/parse2.c (revision 7c5688314b92172186c154356a6374bf7684c3ca)
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