~ubuntu-branches/ubuntu/wily/opencollada/wily-proposed

« back to all changes in this revision

Viewing changes to Externals/LibXML/doc/examples/reader2.c

  • Committer: Package Import Robot
  • Author(s): Matteo F. Vescovi
  • Date: 2015-05-14 17:23:27 UTC
  • Revision ID: package-import@ubuntu.com-20150514172327-f862u8envms01fra
Tags: upstream-0.1.0~20140703.ddf8f47+dfsg1
ImportĀ upstreamĀ versionĀ 0.1.0~20140703.ddf8f47+dfsg1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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