--- /dev/null
+
+#include <stdio.h>
+#include <malloc.h>
+#include "xml.h"
+
+void print_xml(void *);
+
+int main(int argc, char **argv)
+{
+ if (argc < 1)
+ {
+ printf("usage: printxml <filename>\n\n");
+ }
+ else
+ {
+ void *rid;
+
+ rid = xmlOpen(argv[1]);
+ if (rid)
+ {
+ unsigned int i, num;
+ void *xid;
+
+ xid = xmlMarkId(rid);
+ num = xmlNodeGetNum(xid, "*");
+ for (i=0; i<num; i++)
+ {
+ if (xmlNodeGetPos(rid, xid, "*", i) != 0)
+ {
+ char name[256];
+ xmlNodeCopyName(xid, (char *)&name, 256);
+ printf("<%s>\n", name);
+ print_xml(xid);
+ printf("\n</%s>\n", name);
+ }
+ }
+ free(xid);
+
+ xmlClose(rid);
+ }
+ else
+ {
+ printf("Error while opening file for reading: '%s'\n", argv[1]);
+ }
+ }
+}
+
+void print_xml(void *id)
+{
+ static int level = 1;
+ void *xid = xmlMarkId(id);
+ unsigned int i, num;
+
+ num = xmlNodeGetNum(xid, "*");
+ if (num == 0)
+ {
+ char value[256];
+ int q;
+
+ q = xmlCopyString(xid, (char *)&value, 256);
+ if (q) printf("%s", value);
+ }
+ else
+ {
+ unsigned int i, q;
+ for (i=0; i<num; i++)
+ {
+ if (xmlNodeGetPos(id, xid, "*", i) != 0)
+ {
+ char name[256];
+
+ xmlNodeCopyName(xid, (char *)&name, 256);
+
+ printf("\n");
+ for(q=0; q<level; q++) printf(" ");
+ printf("<%s>", name);
+
+ level++;
+ print_xml(xid);
+ level--;
+
+ printf("</%s>", name);
+ }
+ else printf("error\n");
+ }
+ printf("\n");
+ for(q=1; q<level; q++) printf(" ");
+ }
+}