145 lines · 3.2 KB · C
RawDownload
/* * 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);}#elseint 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 */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t