| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | 
							- /**
 
-  * section: xmlReader
 
-  * synopsis: Show how to extract subdocuments with xmlReader
 
-  * purpose: Demonstrate the use of xmlTextReaderPreservePattern() 
 
-  *          to parse an XML file with the xmlReader while collecting
 
-  *          only some subparts of the document.
 
-  *          (Note that the XMLReader functions require libxml2 version later
 
-  *          than 2.6.)
 
-  * usage: reader3
 
-  * test: reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp
 
-  * author: Daniel Veillard
 
-  * copy: see Copyright for the status of this software.
 
-  */
 
- #include <stdio.h>
 
- #include <libxml/xmlreader.h>
 
- #if defined(LIBXML_READER_ENABLED) && defined(LIBXML_PATTERN_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
 
- /**
 
-  * streamFile:
 
-  * @filename: the file name to parse
 
-  *
 
-  * Parse and print information about an XML file.
 
-  *
 
-  * Returns the resulting doc with just the elements preserved.
 
-  */
 
- static xmlDocPtr
 
- extractFile(const char *filename, const xmlChar *pattern) {
 
-     xmlDocPtr doc;
 
-     xmlTextReaderPtr reader;
 
-     int ret;
 
-     /*
 
-      * build an xmlReader for that file
 
-      */
 
-     reader = xmlReaderForFile(filename, NULL, 0);
 
-     if (reader != NULL) {
 
-         /*
 
- 	 * add the pattern to preserve
 
- 	 */
 
-         if (xmlTextReaderPreservePattern(reader, pattern, NULL) < 0) {
 
-             fprintf(stderr, "%s : failed add preserve pattern %s\n",
 
- 	            filename, (const char *) pattern);
 
- 	}
 
- 	/*
 
- 	 * Parse and traverse the tree, collecting the nodes in the process
 
- 	 */
 
-         ret = xmlTextReaderRead(reader);
 
-         while (ret == 1) {
 
-             ret = xmlTextReaderRead(reader);
 
-         }
 
-         if (ret != 0) {
 
-             fprintf(stderr, "%s : failed to parse\n", filename);
 
- 	    xmlFreeTextReader(reader);
 
- 	    return(NULL);
 
-         }
 
- 	/*
 
- 	 * get the resulting nodes
 
- 	 */
 
- 	doc = xmlTextReaderCurrentDoc(reader);
 
- 	/*
 
- 	 * Free up the reader
 
- 	 */
 
-         xmlFreeTextReader(reader);
 
-     } else {
 
-         fprintf(stderr, "Unable to open %s\n", filename);
 
- 	return(NULL);
 
-     }
 
-     return(doc);
 
- }
 
- int main(int argc, char **argv) {
 
-     const char *filename = "test3.xml";
 
-     const char *pattern = "preserved";
 
-     xmlDocPtr doc;
 
-     if (argc == 3) {
 
-         filename = argv[1];
 
- 	pattern = argv[2];
 
-     }
 
-     /*
 
-      * this initialize the library and check potential ABI mismatches
 
-      * between the version it was compiled for and the actual shared
 
-      * library used.
 
-      */
 
-     LIBXML_TEST_VERSION
 
-     doc = extractFile(filename, (const xmlChar *) pattern);
 
-     if (doc != NULL) {
 
-         /*
 
- 	 * ouptut the result.
 
- 	 */
 
-         xmlDocDump(stdout, doc);
 
- 	/*
 
- 	 * don't forget to free up the doc
 
- 	 */
 
- 	xmlFreeDoc(doc);
 
-     }
 
-     /*
 
-      * Cleanup function for the XML library.
 
-      */
 
-     xmlCleanupParser();
 
-     /*
 
-      * this is to debug memory for regression tests
 
-      */
 
-     xmlMemoryDump();
 
-     return(0);
 
- }
 
- #else
 
- int main(void) {
 
-     fprintf(stderr, "Reader, Pattern or output support not compiled in\n");
 
-     exit(1);
 
- }
 
- #endif
 
 
  |