reader1.c revision 2156d4387bf23c9b927341da58bd394bb4946017
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 */ 25static void 26processNode(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 */ 57static void 58streamFile(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 78int 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 103int main(void) { 104 fprintf(stderr, "XInclude support not compiled in\n"); 105 exit(1); 106} 107#endif 108