Annotation of embedaddon/libxml2/doc/examples/reader2.c, revision 1.1.1.1
1.1 misho 1: /**
2: * section: xmlReader
3: * synopsis: Parse and validate an XML file with an xmlReader
4: * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file
5: * validating the content in the process and activating options
6: * like entities substitution, and DTD attributes defaulting.
7: * (Note that the XMLReader functions require libxml2 version later
8: * than 2.6.)
9: * usage: reader2 <valid_xml_filename>
10: * test: reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp
11: * author: Daniel Veillard
12: * copy: see Copyright for the status of this software.
13: */
14:
15: #include <stdio.h>
16: #include <libxml/xmlreader.h>
17:
18: #ifdef LIBXML_READER_ENABLED
19:
20: /**
21: * processNode:
22: * @reader: the xmlReader
23: *
24: * Dump information about the current node
25: */
26: static void
27: processNode(xmlTextReaderPtr reader) {
28: const xmlChar *name, *value;
29:
30: name = xmlTextReaderConstName(reader);
31: if (name == NULL)
32: name = BAD_CAST "--";
33:
34: value = xmlTextReaderConstValue(reader);
35:
36: printf("%d %d %s %d %d",
37: xmlTextReaderDepth(reader),
38: xmlTextReaderNodeType(reader),
39: name,
40: xmlTextReaderIsEmptyElement(reader),
41: xmlTextReaderHasValue(reader));
42: if (value == NULL)
43: printf("\n");
44: else {
45: if (xmlStrlen(value) > 40)
46: printf(" %.40s...\n", value);
47: else
48: printf(" %s\n", value);
49: }
50: }
51:
52: /**
53: * streamFile:
54: * @filename: the file name to parse
55: *
56: * Parse, validate and print information about an XML file.
57: */
58: static void
59: streamFile(const char *filename) {
60: xmlTextReaderPtr reader;
61: int ret;
62:
63:
64: /*
65: * Pass some special parsing options to activate DTD attribute defaulting,
66: * entities substitution and DTD validation
67: */
68: reader = xmlReaderForFile(filename, NULL,
69: XML_PARSE_DTDATTR | /* default DTD attributes */
70: XML_PARSE_NOENT | /* substitute entities */
71: XML_PARSE_DTDVALID); /* validate with the DTD */
72: if (reader != NULL) {
73: ret = xmlTextReaderRead(reader);
74: while (ret == 1) {
75: processNode(reader);
76: ret = xmlTextReaderRead(reader);
77: }
78: /*
79: * Once the document has been fully parsed check the validation results
80: */
81: if (xmlTextReaderIsValid(reader) != 1) {
82: fprintf(stderr, "Document %s does not validate\n", filename);
83: }
84: xmlFreeTextReader(reader);
85: if (ret != 0) {
86: fprintf(stderr, "%s : failed to parse\n", filename);
87: }
88: } else {
89: fprintf(stderr, "Unable to open %s\n", filename);
90: }
91: }
92:
93: int main(int argc, char **argv) {
94: if (argc != 2)
95: return(1);
96:
97: /*
98: * this initialize the library and check potential ABI mismatches
99: * between the version it was compiled for and the actual shared
100: * library used.
101: */
102: LIBXML_TEST_VERSION
103:
104: streamFile(argv[1]);
105:
106: /*
107: * Cleanup function for the XML library.
108: */
109: xmlCleanupParser();
110: /*
111: * this is to debug memory for regression tests
112: */
113: xmlMemoryDump();
114: return(0);
115: }
116:
117: #else
118: int main(void) {
119: fprintf(stderr, "XInclude support not compiled in\n");
120: exit(1);
121: }
122: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>