Annotation of embedaddon/libxml2/doc/examples/reader2.c, revision 1.1.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>