Blame doc/examples/reader1.c

Packit Service a31ea6
/**
Packit Service a31ea6
 * section: xmlReader
Packit Service a31ea6
 * synopsis: Parse an XML file with an xmlReader
Packit Service a31ea6
 * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file
Packit Service a31ea6
 *          and dump the informations about the nodes found in the process.
Packit Service a31ea6
 *          (Note that the XMLReader functions require libxml2 version later
Packit Service a31ea6
 *          than 2.6.)
Packit Service a31ea6
 * usage: reader1 <filename>
Packit Service a31ea6
 * test: reader1 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res
Packit Service a31ea6
 * author: Daniel Veillard
Packit Service a31ea6
 * copy: see Copyright for the status of this software.
Packit Service a31ea6
 */
Packit Service a31ea6
Packit Service a31ea6
#include <stdio.h>
Packit Service a31ea6
#include <libxml/xmlreader.h>
Packit Service a31ea6
Packit Service a31ea6
#ifdef LIBXML_READER_ENABLED
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * processNode:
Packit Service a31ea6
 * @reader: the xmlReader
Packit Service a31ea6
 *
Packit Service a31ea6
 * Dump information about the current node
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
processNode(xmlTextReaderPtr reader) {
Packit Service a31ea6
    const xmlChar *name, *value;
Packit Service a31ea6
Packit Service a31ea6
    name = xmlTextReaderConstName(reader);
Packit Service a31ea6
    if (name == NULL)
Packit Service a31ea6
	name = BAD_CAST "--";
Packit Service a31ea6
Packit Service a31ea6
    value = xmlTextReaderConstValue(reader);
Packit Service a31ea6
Packit Service a31ea6
    printf("%d %d %s %d %d", 
Packit Service a31ea6
	    xmlTextReaderDepth(reader),
Packit Service a31ea6
	    xmlTextReaderNodeType(reader),
Packit Service a31ea6
	    name,
Packit Service a31ea6
	    xmlTextReaderIsEmptyElement(reader),
Packit Service a31ea6
	    xmlTextReaderHasValue(reader));
Packit Service a31ea6
    if (value == NULL)
Packit Service a31ea6
	printf("\n");
Packit Service a31ea6
    else {
Packit Service a31ea6
        if (xmlStrlen(value) > 40)
Packit Service a31ea6
            printf(" %.40s...\n", value);
Packit Service a31ea6
        else
Packit Service a31ea6
	    printf(" %s\n", value);
Packit Service a31ea6
    }
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/**
Packit Service a31ea6
 * streamFile:
Packit Service a31ea6
 * @filename: the file name to parse
Packit Service a31ea6
 *
Packit Service a31ea6
 * Parse and print information about an XML file.
Packit Service a31ea6
 */
Packit Service a31ea6
static void
Packit Service a31ea6
streamFile(const char *filename) {
Packit Service a31ea6
    xmlTextReaderPtr reader;
Packit Service a31ea6
    int ret;
Packit Service a31ea6
Packit Service a31ea6
    reader = xmlReaderForFile(filename, NULL, 0);
Packit Service a31ea6
    if (reader != NULL) {
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
        xmlFreeTextReader(reader);
Packit Service a31ea6
        if (ret != 0) {
Packit Service a31ea6
            fprintf(stderr, "%s : failed to parse\n", filename);
Packit Service a31ea6
        }
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
    if (argc != 2)
Packit Service a31ea6
        return(1);
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * this initialize the library and check potential ABI mismatches
Packit Service a31ea6
     * between the version it was compiled for and the actual shared
Packit Service a31ea6
     * library used.
Packit Service a31ea6
     */
Packit Service a31ea6
    LIBXML_TEST_VERSION
Packit Service a31ea6
Packit Service a31ea6
    streamFile(argv[1]);
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Cleanup function for the XML library.
Packit Service a31ea6
     */
Packit Service a31ea6
    xmlCleanupParser();
Packit Service a31ea6
    /*
Packit Service a31ea6
     * this is to debug memory for regression tests
Packit Service a31ea6
     */
Packit Service a31ea6
    xmlMemoryDump();
Packit Service a31ea6
    return(0);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
#else
Packit Service a31ea6
int main(void) {
Packit Service a31ea6
    fprintf(stderr, "XInclude support not compiled in\n");
Packit Service a31ea6
    exit(1);
Packit Service a31ea6
}
Packit Service a31ea6
#endif