Annotation of embedaddon/libxml2/doc/examples/reader1.c, revision 1.1

1.1     ! misho       1: /**
        !             2:  * section: xmlReader
        !             3:  * synopsis: Parse an XML file with an xmlReader
        !             4:  * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file
        !             5:  *          and dump the informations about the nodes found in the process.
        !             6:  *          (Note that the XMLReader functions require libxml2 version later
        !             7:  *          than 2.6.)
        !             8:  * usage: reader1 <filename>
        !             9:  * test: reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp
        !            10:  * author: Daniel Veillard
        !            11:  * copy: see Copyright for the status of this software.
        !            12:  */
        !            13: 
        !            14: #include <stdio.h>
        !            15: #include <libxml/xmlreader.h>
        !            16: 
        !            17: #ifdef LIBXML_READER_ENABLED
        !            18: 
        !            19: /**
        !            20:  * processNode:
        !            21:  * @reader: the xmlReader
        !            22:  *
        !            23:  * Dump information about the current node
        !            24:  */
        !            25: static void
        !            26: processNode(xmlTextReaderPtr reader) {
        !            27:     const xmlChar *name, *value;
        !            28: 
        !            29:     name = xmlTextReaderConstName(reader);
        !            30:     if (name == NULL)
        !            31:        name = BAD_CAST "--";
        !            32: 
        !            33:     value = xmlTextReaderConstValue(reader);
        !            34: 
        !            35:     printf("%d %d %s %d %d", 
        !            36:            xmlTextReaderDepth(reader),
        !            37:            xmlTextReaderNodeType(reader),
        !            38:            name,
        !            39:            xmlTextReaderIsEmptyElement(reader),
        !            40:            xmlTextReaderHasValue(reader));
        !            41:     if (value == NULL)
        !            42:        printf("\n");
        !            43:     else {
        !            44:         if (xmlStrlen(value) > 40)
        !            45:             printf(" %.40s...\n", value);
        !            46:         else
        !            47:            printf(" %s\n", value);
        !            48:     }
        !            49: }
        !            50: 
        !            51: /**
        !            52:  * streamFile:
        !            53:  * @filename: the file name to parse
        !            54:  *
        !            55:  * Parse and print information about an XML file.
        !            56:  */
        !            57: static void
        !            58: streamFile(const char *filename) {
        !            59:     xmlTextReaderPtr reader;
        !            60:     int ret;
        !            61: 
        !            62:     reader = xmlReaderForFile(filename, NULL, 0);
        !            63:     if (reader != NULL) {
        !            64:         ret = xmlTextReaderRead(reader);
        !            65:         while (ret == 1) {
        !            66:             processNode(reader);
        !            67:             ret = xmlTextReaderRead(reader);
        !            68:         }
        !            69:         xmlFreeTextReader(reader);
        !            70:         if (ret != 0) {
        !            71:             fprintf(stderr, "%s : failed to parse\n", filename);
        !            72:         }
        !            73:     } else {
        !            74:         fprintf(stderr, "Unable to open %s\n", filename);
        !            75:     }
        !            76: }
        !            77: 
        !            78: int main(int argc, char **argv) {
        !            79:     if (argc != 2)
        !            80:         return(1);
        !            81: 
        !            82:     /*
        !            83:      * this initialize the library and check potential ABI mismatches
        !            84:      * between the version it was compiled for and the actual shared
        !            85:      * library used.
        !            86:      */
        !            87:     LIBXML_TEST_VERSION
        !            88: 
        !            89:     streamFile(argv[1]);
        !            90: 
        !            91:     /*
        !            92:      * Cleanup function for the XML library.
        !            93:      */
        !            94:     xmlCleanupParser();
        !            95:     /*
        !            96:      * this is to debug memory for regression tests
        !            97:      */
        !            98:     xmlMemoryDump();
        !            99:     return(0);
        !           100: }
        !           101: 
        !           102: #else
        !           103: int main(void) {
        !           104:     fprintf(stderr, "XInclude support not compiled in\n");
        !           105:     exit(1);
        !           106: }
        !           107: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>