File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / testReader.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:37:58 2012 UTC (12 years, 3 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, v2_8_0p0, v2_8_0, v2_7_8, HEAD
libxml2

    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>