aboutsummaryrefslogtreecommitdiff
path: root/libxml2-2.9.10/doc/examples/reader1.c
diff options
context:
space:
mode:
Diffstat (limited to 'libxml2-2.9.10/doc/examples/reader1.c')
-rw-r--r--libxml2-2.9.10/doc/examples/reader1.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/libxml2-2.9.10/doc/examples/reader1.c b/libxml2-2.9.10/doc/examples/reader1.c
new file mode 100644
index 0000000..e8a005a
--- /dev/null
+++ b/libxml2-2.9.10/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