Annotation of embedaddon/libxml2/doc/examples/reader1.c, revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>