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 | }
|
---|