Return to reader2.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / doc / examples |
1.1 ! misho 1: /** ! 2: * section: xmlReader ! 3: * synopsis: Parse and validate an XML file with an xmlReader ! 4: * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file ! 5: * validating the content in the process and activating options ! 6: * like entities substitution, and DTD attributes defaulting. ! 7: * (Note that the XMLReader functions require libxml2 version later ! 8: * than 2.6.) ! 9: * usage: reader2 <valid_xml_filename> ! 10: * test: reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp ! 11: * author: Daniel Veillard ! 12: * copy: see Copyright for the status of this software. ! 13: */ ! 14: ! 15: #include <stdio.h> ! 16: #include <libxml/xmlreader.h> ! 17: ! 18: #ifdef LIBXML_READER_ENABLED ! 19: ! 20: /** ! 21: * processNode: ! 22: * @reader: the xmlReader ! 23: * ! 24: * Dump information about the current node ! 25: */ ! 26: static void ! 27: processNode(xmlTextReaderPtr reader) { ! 28: const xmlChar *name, *value; ! 29: ! 30: name = xmlTextReaderConstName(reader); ! 31: if (name == NULL) ! 32: name = BAD_CAST "--"; ! 33: ! 34: value = xmlTextReaderConstValue(reader); ! 35: ! 36: printf("%d %d %s %d %d", ! 37: xmlTextReaderDepth(reader), ! 38: xmlTextReaderNodeType(reader), ! 39: name, ! 40: xmlTextReaderIsEmptyElement(reader), ! 41: xmlTextReaderHasValue(reader)); ! 42: if (value == NULL) ! 43: printf("\n"); ! 44: else { ! 45: if (xmlStrlen(value) > 40) ! 46: printf(" %.40s...\n", value); ! 47: else ! 48: printf(" %s\n", value); ! 49: } ! 50: } ! 51: ! 52: /** ! 53: * streamFile: ! 54: * @filename: the file name to parse ! 55: * ! 56: * Parse, validate and print information about an XML file. ! 57: */ ! 58: static void ! 59: streamFile(const char *filename) { ! 60: xmlTextReaderPtr reader; ! 61: int ret; ! 62: ! 63: ! 64: /* ! 65: * Pass some special parsing options to activate DTD attribute defaulting, ! 66: * entities substitution and DTD validation ! 67: */ ! 68: reader = xmlReaderForFile(filename, NULL, ! 69: XML_PARSE_DTDATTR | /* default DTD attributes */ ! 70: XML_PARSE_NOENT | /* substitute entities */ ! 71: XML_PARSE_DTDVALID); /* validate with the DTD */ ! 72: if (reader != NULL) { ! 73: ret = xmlTextReaderRead(reader); ! 74: while (ret == 1) { ! 75: processNode(reader); ! 76: ret = xmlTextReaderRead(reader); ! 77: } ! 78: /* ! 79: * Once the document has been fully parsed check the validation results ! 80: */ ! 81: if (xmlTextReaderIsValid(reader) != 1) { ! 82: fprintf(stderr, "Document %s does not validate\n", filename); ! 83: } ! 84: xmlFreeTextReader(reader); ! 85: if (ret != 0) { ! 86: fprintf(stderr, "%s : failed to parse\n", filename); ! 87: } ! 88: } else { ! 89: fprintf(stderr, "Unable to open %s\n", filename); ! 90: } ! 91: } ! 92: ! 93: int main(int argc, char **argv) { ! 94: if (argc != 2) ! 95: return(1); ! 96: ! 97: /* ! 98: * this initialize the library and check potential ABI mismatches ! 99: * between the version it was compiled for and the actual shared ! 100: * library used. ! 101: */ ! 102: LIBXML_TEST_VERSION ! 103: ! 104: streamFile(argv[1]); ! 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, "XInclude support not compiled in\n"); ! 120: exit(1); ! 121: } ! 122: #endif