Blame testReader.c

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