*** empty log message ***
[m17n/m17n-test.git] / mim-xml.c
1 /* XML の解析 */
2
3 #include <stdio.h>
4 #include <string.h>
5 #include <stdlib.h>
6 #include <libxml/xmlreader.h>
7 #include <libxml/xmlmemory.h>
8
9 void
10 error_exit (char *fmt, const char *arg)
11 {
12   fprintf (stderr, fmt, arg);
13   fprintf (stderr, "\n");
14   exit (1);
15 }
16
17 int
18 main (int argc, char **argv)
19 {
20 #if 0
21   XPathContextPtr context;
22   xmlXPathObjectPtr result;
23   xmlChar *xpath = (xmlChar *) "//input-method";
24   xmlNodeSetPtr nodeset;
25 #endif
26   const xmlChar *name, *value;
27   xmlTextReaderPtr reader;
28   int depth;
29
30   reader = xmlReaderForFile (argv[1], "utf-8",
31                              XML_PARSE_NOBLANKS
32                              /*XML_PARSE_XINCLUDE|XML_PARSE_NOENT*/);
33   /*xmlTextReaderRelaxNGValidate (reader, argv[2]);*/
34   if (xmlTextReaderRead (reader) != 1)
35     error_exit ("Read error: %s", argv[1]);
36   if (! (name = xmlTextReaderConstLocalName (reader)))
37     error_exit ("No %s node", "input-method");
38   printf ("%s", (char *) name);
39   xmlTextReaderRead (reader);
40   if (! (name = xmlTextReaderConstLocalName (reader)))
41     error_exit ("No inner node: %s", "tags");
42   printf (" %s", (char *) name);
43   xmlTextReaderRead (reader);
44   printf (" %s", (char *) xmlTextReaderConstLocalName (reader));
45   xmlTextReaderRead (reader);
46   printf (" %s", (char *) xmlTextReaderConstLocalName (reader));
47   depth = xmlTextReaderDepth(reader);
48   value = xmlTextReaderConstValue (reader);
49   printf (" \"%s\"", (char *) value);
50   xmlTextReaderRead (reader);
51   xmlTextReaderRead (reader);
52   xmlTextReaderRead (reader);
53   value = xmlTextReaderConstValue (reader);
54   printf (" \"%s\"", (char *) value);
55   do { xmlTextReaderRead (reader); }
56   while (xmlTextReaderNodeType (reader) != XML_READER_TYPE_TEXT);
57   value = xmlTextReaderConstValue (reader);
58   if (depth == xmlTextReaderDepth(reader))
59     printf (" \"%s\"", (char *) value);
60   printf ("\n");
61
62 #if 0
63   xmlTextReaderRelaxNGValidate (reader, argv[2]);
64   while ((i = xmlTextReaderRead (reader)) == 1);
65   printf ("%d\n\n", i);
66 #endif
67
68 #if 0
69   doc = xmlParseFile (argv[1]);
70   if (! doc)
71     error_exit ("Invalid XML file: %s", argv[1]);
72   context = xmlXPathNewContext (doc);
73   result = xmlXPathEvalExpression (xpath, context);
74   if (! result)
75     error_exit ("Error in xmlXPathEvalExpression for: %s", (char *) xpath);
76   xmlXPathFreeContext (context);
77   if (xmlXPathNodeSetIsEmpty (result->nodesetval))
78     error_exit ("Can't find the node: %s", (char *) xpath);
79   nodeset = result->nodesetval;
80   for (i = 0; i < nodeset->nodeNr; i++)
81     {
82       key = xmlGetProp (nodeset->nodeTab[i], "input-method-name");
83       printf ("input-method-name: %s\n", key);
84       xmlFree (key);
85       key = xmlGetProp (nodeset->nodeTab[i], "language");
86       printf ("langauge: %s\n", key);
87       xmlFree (key);
88       key = xmlGetProp (nodeset->nodeTab[i], "extra-id");
89       if (key)
90         {
91           printf ("extra-id: %s\n", key);
92           xmlFree (key);
93         }
94     }
95   xmlXPathFreeObject (result);
96 #endif
97   exit (0);
98 }