summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--parse.c48
2 files changed, 50 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..fea7d03d8
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,2 @@
+parse: parse.c
+ gcc -g -o parse `xml2-config --cflags` parse.c `xml2-config --libs`
diff --git a/parse.c b/parse.c
new file mode 100644
index 000000000..6277a9021
--- /dev/null
+++ b/parse.c
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+static void show_one_node(int i, xmlNode *node)
+{
+ static const char indent[] = " ..";
+
+ if (i >= sizeof(indent))
+ i = sizeof(indent)-1;
+ printf("%.*snode '%s': %s\n", i, indent, node->name, node->content);
+}
+
+static void show(int indent, xmlNode *node)
+{
+ xmlNode *n;
+
+ for (n = node; n; n = n->next) {
+ show_one_node(indent, n);
+ show(indent+2, n->children);
+ }
+}
+
+static void parse(const char *filename)
+{
+ xmlDoc *doc;
+
+ doc = xmlReadFile(filename, NULL, 0);
+ if (!doc) {
+ fprintf(stderr, "Failed to parse '%s'.\n", filename);
+ return;
+ }
+
+ show(0, xmlDocGetRootElement(doc));
+ xmlFreeDoc(doc);
+ xmlCleanupParser();
+}
+
+int main(int argc, char **argv)
+{
+ int i;
+
+ LIBXML_TEST_VERSION
+
+ for (i = 1; i < argc; i++)
+ parse(argv[i]);
+ return 0;
+}