diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | parse.c | 48 |
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; +} |