diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2016-11-17 21:10:17 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2016-11-17 21:10:17 (GMT) |
commit | 8096d34300076a1aa9cb517de49fb920a051939f (patch) | |
tree | 5f2b1b7c41f89fedc31af973d6a747ca674cfd24 /libxml2/doc/examples/reader1.c | |
parent | fc7f7edd0b8011cb71573b15462ef83068d9e54b (diff) | |
parent | 574585fa78070b0cc6b5ad22543e21a3502a122b (diff) | |
download | blt-8096d34300076a1aa9cb517de49fb920a051939f.zip blt-8096d34300076a1aa9cb517de49fb920a051939f.tar.gz blt-8096d34300076a1aa9cb517de49fb920a051939f.tar.bz2 |
Merge commit '574585fa78070b0cc6b5ad22543e21a3502a122b' as 'libxml2'
Diffstat (limited to 'libxml2/doc/examples/reader1.c')
-rw-r--r-- | libxml2/doc/examples/reader1.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/libxml2/doc/examples/reader1.c b/libxml2/doc/examples/reader1.c new file mode 100644 index 0000000..e8a005a --- /dev/null +++ b/libxml2/doc/examples/reader1.c @@ -0,0 +1,107 @@ +/** + * section: xmlReader + * synopsis: Parse an XML file with an xmlReader + * purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file + * and dump the informations about the nodes found in the process. + * (Note that the XMLReader functions require libxml2 version later + * than 2.6.) + * usage: reader1 <filename> + * test: reader1 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 void +processNode(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 and print information about an XML file. + */ +static void +streamFile(const char *filename) { + xmlTextReaderPtr reader; + int ret; + + reader = xmlReaderForFile(filename, NULL, 0); + if (reader != NULL) { + ret = xmlTextReaderRead(reader); + while (ret == 1) { + processNode(reader); + ret = xmlTextReaderRead(reader); + } + 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); +} + +#else +int main(void) { + fprintf(stderr, "XInclude support not compiled in\n"); + exit(1); +} +#endif |