123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /*
- * testSAX.c : a small tester program for parsing using the SAX API.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
- #include "libxml.h"
- #ifdef LIBXML_READER_ENABLED
- #include <string.h>
- #include <stdarg.h>
- #ifdef HAVE_SYS_TYPES_H
- #include <sys/types.h>
- #endif
- #ifdef HAVE_SYS_STAT_H
- #include <sys/stat.h>
- #endif
- #ifdef HAVE_FCNTL_H
- #include <fcntl.h>
- #endif
- #ifdef HAVE_UNISTD_H
- #include <unistd.h>
- #endif
- #ifdef HAVE_STDLIB_H
- #include <stdlib.h>
- #endif
- #ifdef HAVE_STRING_H
- #include <string.h>
- #endif
- #include <libxml/xmlreader.h>
- static int debug = 0;
- static int dump = 0;
- static int noent = 0;
- static int count = 0;
- static int valid = 0;
- static int consumed = 0;
- static void usage(const char *progname) {
- printf("Usage : %s [options] XMLfiles ...\n", progname);
- printf("\tParse the XML files using the xmlTextReader API\n");
- printf("\t --count: count the number of attribute and elements\n");
- printf("\t --valid: validate the document\n");
- printf("\t --consumed: count the number of bytes consumed\n");
- exit(1);
- }
- static int elem, attrs;
- static void processNode(xmlTextReaderPtr reader) {
- int type;
- type = xmlTextReaderNodeType(reader);
- if (count) {
- if (type == 1) {
- elem++;
- attrs += xmlTextReaderAttributeCount(reader);
- }
- }
- }
- static void handleFile(const char *filename) {
- xmlTextReaderPtr reader;
- int ret;
- if (count) {
- elem = 0;
- attrs = 0;
- }
- reader = xmlNewTextReaderFilename(filename);
- if (reader != NULL) {
- if (valid)
- xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);
- /*
- * Process all nodes in sequence
- */
- ret = xmlTextReaderRead(reader);
- while (ret == 1) {
- processNode(reader);
- ret = xmlTextReaderRead(reader);
- }
- /*
- * Done, cleanup and status
- */
- if (consumed)
- printf("%ld bytes consumed by parser\n", xmlTextReaderByteConsumed(reader));
- xmlFreeTextReader(reader);
- if (ret != 0) {
- printf("%s : failed to parse\n", filename);
- } else if (count)
- printf("%s : %d elements, %d attributes\n", filename, elem, attrs);
- } else {
- fprintf(stderr, "Unable to open %s\n", filename);
- }
- }
- int main(int argc, char **argv) {
- int i;
- int files = 0;
- if (argc <= 1) {
- usage(argv[0]);
- return(1);
- }
- LIBXML_TEST_VERSION
- for (i = 1; i < argc ; i++) {
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
- debug++;
- else if ((!strcmp(argv[i], "-dump")) || (!strcmp(argv[i], "--dump")))
- dump++;
- else if ((!strcmp(argv[i], "-count")) || (!strcmp(argv[i], "--count")))
- count++;
- else if ((!strcmp(argv[i], "-consumed")) || (!strcmp(argv[i], "--consumed")))
- consumed++;
- else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))
- valid++;
- else if ((!strcmp(argv[i], "-noent")) ||
- (!strcmp(argv[i], "--noent")))
- noent++;
- }
- if (noent != 0) xmlSubstituteEntitiesDefault(1);
- for (i = 1; i < argc ; i++) {
- if (argv[i][0] != '-') {
- handleFile(argv[i]);
- files ++;
- }
- }
- xmlCleanupParser();
- xmlMemoryDump();
- return(0);
- }
- #else
- int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : xmlReader parser support not compiled in\n", argv[0]);
- return(0);
- }
- #endif /* LIBXML_READER_ENABLED */
|