File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / doc / examples / reader4.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:37:59 2012 UTC (12 years, 4 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_8_0p0, v2_8_0, v2_7_8, HEAD
libxml2

    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>