4 #include <libxml/xmlreader.h>
5 #include <libxml/xmlmemory.h>
8 error_exit (char *fmt, char *arg)
10 fprintf (stderr, fmt, arg);
15 main (int argc, char **argv)
18 XPathContextPtr context;
19 xmlXPathObjectPtr result;
20 xmlChar *xpath = (xmlChar *) "//input-method";
22 xmlNodeSetPtr nodeset;
25 xmlTextReaderPtr reader;
27 reader = xmlReaderForFile (argv[1], "utf-8", 0);
28 xmlTextReaderRelaxNGValidate (reader, argv[2]);
29 while ((i = xmlTextReaderRead (reader)) == 1);
33 doc = xmlParseFile (argv[1]);
35 error_exit ("Invalid XML file: %s", argv[1]);
36 context = xmlXPathNewContext (doc);
37 result = xmlXPathEvalExpression (xpath, context);
39 error_exit ("Error in xmlXPathEvalExpression for: %s", (char *) xpath);
40 xmlXPathFreeContext (context);
41 if (xmlXPathNodeSetIsEmpty (result->nodesetval))
42 error_exit ("Can't find the node: %s", (char *) xpath);
43 nodeset = result->nodesetval;
44 for (i = 0; i < nodeset->nodeNr; i++)
46 key = xmlGetProp (nodeset->nodeTab[i], "input-method-name");
47 printf ("input-method-name: %s\n", key);
49 key = xmlGetProp (nodeset->nodeTab[i], "language");
50 printf ("langauge: %s\n", key);
52 key = xmlGetProp (nodeset->nodeTab[i], "extra-id");
55 printf ("extra-id: %s\n", key);
59 xmlXPathFreeObject (result);