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

1.1     ! misho       1: /**
        !             2:  * section: xmlReader
        !             3:  * synopsis: Parse multiple XML files reusing an xmlReader
        !             4:  * purpose: Demonstrate the use of xmlReaderForFile() and
        !             5:  * xmlReaderNewFile to parse XML files while reusing the reader object
        !             6:  * and parser context.  (Note that the XMLReader functions require
        !             7:  * libxml2 version later than 2.6.)
        !             8:  * usage: reader4 <filename> [ filename ... ]
        !             9:  * test: reader4 test1.xml test2.xml test3.xml > reader4.tmp ; diff reader4.tmp reader4.res ; rm reader4.tmp
        !            10:  * author: Graham Bennett
        !            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: static void processDoc(xmlTextReaderPtr readerPtr) {
        !            20:     int ret;
        !            21:     xmlDocPtr docPtr;
        !            22:     const xmlChar *URL;
        !            23: 
        !            24:     ret = xmlTextReaderRead(readerPtr);
        !            25:     while (ret == 1) {
        !            26:       ret = xmlTextReaderRead(readerPtr);
        !            27:     }
        !            28: 
        !            29:     /*
        !            30:      * One can obtain the document pointer to get insteresting
        !            31:      * information about the document like the URL, but one must also
        !            32:      * be sure to clean it up at the end (see below).
        !            33:      */
        !            34:     docPtr = xmlTextReaderCurrentDoc(readerPtr);
        !            35:     if (NULL == docPtr) {
        !            36:       fprintf(stderr, "failed to obtain document\n");      
        !            37:       return;
        !            38:     }
        !            39:       
        !            40:     URL = docPtr->URL;
        !            41:     if (NULL == URL) {
        !            42:       fprintf(stderr, "Failed to obtain URL\n");      
        !            43:     }
        !            44: 
        !            45:     if (ret != 0) {
        !            46:       fprintf(stderr, "%s: Failed to parse\n", URL);
        !            47:       return;
        !            48:     }
        !            49: 
        !            50:     printf("%s: Processed ok\n", (const char *)URL);
        !            51: }
        !            52: 
        !            53: int main(int argc, char **argv) {
        !            54:     xmlTextReaderPtr readerPtr;
        !            55:     int i;
        !            56:     xmlDocPtr docPtr;
        !            57: 
        !            58:     if (argc < 2)
        !            59:         return(1);
        !            60: 
        !            61:     /*
        !            62:      * this initialises the library and check potential ABI mismatches
        !            63:      * between the version it was compiled for and the actual shared
        !            64:      * library used.
        !            65:      */
        !            66:     LIBXML_TEST_VERSION
        !            67: 
        !            68:     /*
        !            69:      * Create a new reader for the first file and process the
        !            70:      * document.
        !            71:      */
        !            72:     readerPtr = xmlReaderForFile(argv[1], NULL, 0);
        !            73:     if (NULL == readerPtr) {
        !            74:       fprintf(stderr, "%s: failed to create reader\n", argv[1]);      
        !            75:       return(1);
        !            76:     }
        !            77:     processDoc(readerPtr);
        !            78: 
        !            79:     /*
        !            80:      * The reader can be reused for subsequent files.
        !            81:      */
        !            82:     for (i=2; i < argc; ++i) {
        !            83:        xmlReaderNewFile(readerPtr, argv[i], NULL, 0);
        !            84:        if (NULL == readerPtr) {
        !            85:          fprintf(stderr, "%s: failed to create reader\n", argv[i]);      
        !            86:          return(1);
        !            87:        }
        !            88:         processDoc(readerPtr);
        !            89:     }
        !            90: 
        !            91:     /*
        !            92:      * Since we've called xmlTextReaderCurrentDoc, we now have to
        !            93:      * clean up after ourselves.  We only have to do this the last
        !            94:      * time, because xmlReaderNewFile calls xmlCtxtReset which takes
        !            95:      * care of it.
        !            96:      */
        !            97:     docPtr = xmlTextReaderCurrentDoc(readerPtr);
        !            98:     if (docPtr != NULL)
        !            99:       xmlFreeDoc(docPtr);
        !           100: 
        !           101:     /*
        !           102:      * Clean up the reader.
        !           103:      */
        !           104:     xmlFreeTextReader(readerPtr);
        !           105: 
        !           106:     /*
        !           107:      * Cleanup function for the XML library.
        !           108:      */
        !           109:     xmlCleanupParser();
        !           110:     /*
        !           111:      * this is to debug memory for regression tests
        !           112:      */
        !           113:     xmlMemoryDump();
        !           114:     return(0);
        !           115: }
        !           116: 
        !           117: #else
        !           118: int main(void) {
        !           119:     fprintf(stderr, "xmlReader support not compiled in\n");
        !           120:     exit(1);
        !           121: }
        !           122: #endif

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