]> git.mxchange.org Git - flightgear.git/blob - utils/xmlgrep/printxml.c
c35f7f1b552b92b8847202f5598751db635d497e
[flightgear.git] / utils / xmlgrep / printxml.c
1
2 #include <stdio.h>
3 #include <malloc.h>
4 #include "xml.h"
5
6 void print_xml(void *);
7
8 int main(int argc, char **argv)
9 {
10   if (argc < 1)
11   {
12     printf("usage: printxml <filename>\n\n");
13   }
14   else
15   {
16     void *rid;
17
18     rid = xmlOpen(argv[1]);
19     if (rid)
20     {
21       unsigned int i, num;
22       void *xid;
23  
24       xid = xmlMarkId(rid);
25       num = xmlNodeGetNum(xid, "*");
26       for (i=0; i<num; i++)
27       {
28         if (xmlNodeGetPos(rid, xid, "*", i) != 0)
29         {
30           char name[256];
31           xmlNodeCopyName(xid, (char *)&name, 256);
32           printf("<%s>\n", name);
33           print_xml(xid);
34           printf("\n</%s>\n", name);
35         }
36       }
37       free(xid);
38
39       xmlClose(rid);
40     }
41     else
42     {
43       printf("Error while opening file for reading: '%s'\n", argv[1]);
44     }
45   }
46 }
47
48 void print_xml(void *id)
49 {
50   static int level = 1;
51   void *xid = xmlMarkId(id);
52   unsigned int i, num;
53   
54   num = xmlNodeGetNum(xid, "*");
55   if (num == 0)
56   {
57     char value[256];
58     int q;
59
60     q = xmlCopyString(xid, (char *)&value, 256);
61     if (q) printf("%s", value);
62   }
63   else
64   {
65     unsigned int i, q;
66     for (i=0; i<num; i++)
67     {
68       if (xmlNodeGetPos(id, xid, "*", i) != 0)
69       {
70         char name[256];
71
72         xmlNodeCopyName(xid, (char *)&name, 256);
73
74         printf("\n");
75         for(q=0; q<level; q++) printf(" ");
76         printf("<%s>", name);
77
78         level++;
79         print_xml(xid);
80         level--;
81
82         printf("</%s>", name);
83       }
84       else printf("error\n");
85     }
86     printf("\n");
87     for(q=1; q<level; q++) printf(" ");
88   }
89 }