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