122 lines · 3.1 KB · C
RawDownload
/** * section: xmlReader * synopsis: Parse and validate an XML file with an xmlReader * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file *          validating the content in the process and activating options *          like entities substitution, and DTD attributes defaulting. *          (Note that the XMLReader functions require libxml2 version later *          than 2.6.) * usage: reader2 <valid_xml_filename> * test: reader2 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res * author: Daniel Veillard * copy: see Copyright for the status of this software. */ #include <stdio.h>#include <libxml/xmlreader.h> #ifdef LIBXML_READER_ENABLED /** * processNode: * @reader: the xmlReader * * Dump information about the current node */static voidprocessNode(xmlTextReaderPtr reader) {    const xmlChar *name, *value;     name = xmlTextReaderConstName(reader);    if (name == NULL)	name = BAD_CAST "--";     value = xmlTextReaderConstValue(reader);     printf("%d %d %s %d %d", 	    xmlTextReaderDepth(reader),	    xmlTextReaderNodeType(reader),	    name,	    xmlTextReaderIsEmptyElement(reader),	    xmlTextReaderHasValue(reader));    if (value == NULL)	printf("\n");    else {        if (xmlStrlen(value) > 40)            printf(" %.40s...\n", value);        else	    printf(" %s\n", value);    }} /** * streamFile: * @filename: the file name to parse * * Parse, validate and print information about an XML file. */static voidstreamFile(const char *filename) {    xmlTextReaderPtr reader;    int ret;      /*     * Pass some special parsing options to activate DTD attribute defaulting,     * entities substitution and DTD validation     */    reader = xmlReaderForFile(filename, NULL,                 XML_PARSE_DTDATTR |  /* default DTD attributes */		 XML_PARSE_NOENT |    /* substitute entities */		 XML_PARSE_DTDVALID); /* validate with the DTD */    if (reader != NULL) {        ret = xmlTextReaderRead(reader);        while (ret == 1) {            processNode(reader);            ret = xmlTextReaderRead(reader);        }	/*	 * Once the document has been fully parsed check the validation results	 */	if (xmlTextReaderIsValid(reader) != 1) {	    fprintf(stderr, "Document %s does not validate\n", filename);	}        xmlFreeTextReader(reader);        if (ret != 0) {            fprintf(stderr, "%s : failed to parse\n", filename);        }    } else {        fprintf(stderr, "Unable to open %s\n", filename);    }} int main(int argc, char **argv) {    if (argc != 2)        return(1);     /*     * this initialize the library and check potential ABI mismatches     * between the version it was compiled for and the actual shared     * library used.     */    LIBXML_TEST_VERSION     streamFile(argv[1]);     /*     * Cleanup function for the XML library.     */    xmlCleanupParser();    /*     * this is to debug memory for regression tests     */    xmlMemoryDump();    return(0);} #elseint main(void) {    fprintf(stderr, "XInclude support not compiled in\n");    exit(1);}#endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t