Annotation of embedaddon/libxml2/doc/examples/reader4.c, revision 1.1.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>