6 #include <libxml/xmlreader.h>
7 #include <libxml/xmlmemory.h>
10 error_exit (char *fmt, const char *arg)
12 fprintf (stderr, fmt, arg);
13 fprintf (stderr, "\n");
18 main (int argc, char **argv)
21 XPathContextPtr context;
22 xmlXPathObjectPtr result;
23 xmlChar *xpath = (xmlChar *) "//input-method";
24 xmlNodeSetPtr nodeset;
26 const xmlChar *name, *value;
27 xmlTextReaderPtr reader;
30 reader = xmlReaderForFile (argv[1], "utf-8",
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);
63 xmlTextReaderRelaxNGValidate (reader, argv[2]);
64 while ((i = xmlTextReaderRead (reader)) == 1);
69 doc = xmlParseFile (argv[1]);
71 error_exit ("Invalid XML file: %s", argv[1]);
72 context = xmlXPathNewContext (doc);
73 result = xmlXPathEvalExpression (xpath, context);
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++)
82 key = xmlGetProp (nodeset->nodeTab[i], "input-method-name");
83 printf ("input-method-name: %s\n", key);
85 key = xmlGetProp (nodeset->nodeTab[i], "language");
86 printf ("langauge: %s\n", key);
88 key = xmlGetProp (nodeset->nodeTab[i], "extra-id");
91 printf ("extra-id: %s\n", key);
95 xmlXPathFreeObject (result);