Annotation of embedaddon/libxml2/testReader.c, revision 1.1.1.1
1.1 misho 1: /*
2: * testSAX.c : a small tester program for parsing using the SAX API.
3: *
4: * See Copyright for the status of this software.
5: *
6: * daniel@veillard.com
7: */
8:
9: #include "libxml.h"
10:
11: #ifdef LIBXML_READER_ENABLED
12: #include <string.h>
13: #include <stdarg.h>
14:
15: #ifdef HAVE_SYS_TYPES_H
16: #include <sys/types.h>
17: #endif
18: #ifdef HAVE_SYS_STAT_H
19: #include <sys/stat.h>
20: #endif
21: #ifdef HAVE_FCNTL_H
22: #include <fcntl.h>
23: #endif
24: #ifdef HAVE_UNISTD_H
25: #include <unistd.h>
26: #endif
27: #ifdef HAVE_STDLIB_H
28: #include <stdlib.h>
29: #endif
30: #ifdef HAVE_STRING_H
31: #include <string.h>
32: #endif
33:
34:
35: #include <libxml/xmlreader.h>
36:
37: static int debug = 0;
38: static int dump = 0;
39: static int noent = 0;
40: static int count = 0;
41: static int valid = 0;
42: static int consumed = 0;
43:
44: static void usage(const char *progname) {
45: printf("Usage : %s [options] XMLfiles ...\n", progname);
46: printf("\tParse the XML files using the xmlTextReader API\n");
47: printf("\t --count: count the number of attribute and elements\n");
48: printf("\t --valid: validate the document\n");
49: printf("\t --consumed: count the number of bytes consumed\n");
50: exit(1);
51: }
52: static int elem, attrs;
53:
54: static void processNode(xmlTextReaderPtr reader) {
55: int type;
56:
57: type = xmlTextReaderNodeType(reader);
58: if (count) {
59: if (type == 1) {
60: elem++;
61: attrs += xmlTextReaderAttributeCount(reader);
62: }
63: }
64: }
65:
66: static void handleFile(const char *filename) {
67: xmlTextReaderPtr reader;
68: int ret;
69:
70: if (count) {
71: elem = 0;
72: attrs = 0;
73: }
74:
75: reader = xmlNewTextReaderFilename(filename);
76: if (reader != NULL) {
77: if (valid)
78: xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);
79:
80: /*
81: * Process all nodes in sequence
82: */
83: ret = xmlTextReaderRead(reader);
84: while (ret == 1) {
85: processNode(reader);
86: ret = xmlTextReaderRead(reader);
87: }
88:
89: /*
90: * Done, cleanup and status
91: */
92: if (consumed)
93: printf("%ld bytes consumed by parser\n", xmlTextReaderByteConsumed(reader));
94: xmlFreeTextReader(reader);
95: if (ret != 0) {
96: printf("%s : failed to parse\n", filename);
97: } else if (count)
98: printf("%s : %d elements, %d attributes\n", filename, elem, attrs);
99: } else {
100: fprintf(stderr, "Unable to open %s\n", filename);
101: }
102: }
103:
104: int main(int argc, char **argv) {
105: int i;
106: int files = 0;
107:
108: if (argc <= 1) {
109: usage(argv[0]);
110: return(1);
111: }
112: LIBXML_TEST_VERSION
113: for (i = 1; i < argc ; i++) {
114: if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
115: debug++;
116: else if ((!strcmp(argv[i], "-dump")) || (!strcmp(argv[i], "--dump")))
117: dump++;
118: else if ((!strcmp(argv[i], "-count")) || (!strcmp(argv[i], "--count")))
119: count++;
120: else if ((!strcmp(argv[i], "-consumed")) || (!strcmp(argv[i], "--consumed")))
121: consumed++;
122: else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))
123: valid++;
124: else if ((!strcmp(argv[i], "-noent")) ||
125: (!strcmp(argv[i], "--noent")))
126: noent++;
127: }
128: if (noent != 0) xmlSubstituteEntitiesDefault(1);
129: for (i = 1; i < argc ; i++) {
130: if (argv[i][0] != '-') {
131: handleFile(argv[i]);
132: files ++;
133: }
134: }
135: xmlCleanupParser();
136: xmlMemoryDump();
137:
138: return(0);
139: }
140: #else
141: int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
142: printf("%s : xmlReader parser support not compiled in\n", argv[0]);
143: return(0);
144: }
145: #endif /* LIBXML_READER_ENABLED */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>