123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /**
- * 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 reader1.res ; rm reader1.tmp
- * 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
|