Annotation of embedaddon/libxml2/doc/examples/reader2.c, revision 1.1
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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>