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