6 #include <libxml/xmlreader.h>
7 #include <libxml/xmlmemory.h>
10 error_exit (char *fmt, char *arg)
12 fprintf (stderr, fmt, arg);
17 main (int argc, char **argv)
20 XPathContextPtr context;
21 xmlXPathObjectPtr result;
22 xmlChar *xpath = (xmlChar *) "//input-method";
24 xmlNodeSetPtr nodeset;
27 xmlTextReaderPtr reader;
29 reader = xmlReaderForFile (argv[1], "utf-8", 0);
30 xmlTextReaderRelaxNGValidate (reader, argv[2]);
31 while ((i = xmlTextReaderRead (reader)) == 1);
35 doc = xmlParseFile (argv[1]);
37 error_exit ("Invalid XML file: %s", argv[1]);
38 context = xmlXPathNewContext (doc);
39 result = xmlXPathEvalExpression (xpath, context);
41 error_exit ("Error in xmlXPathEvalExpression for: %s", (char *) xpath);
42 xmlXPathFreeContext (context);
43 if (xmlXPathNodeSetIsEmpty (result->nodesetval))
44 error_exit ("Can't find the node: %s", (char *) xpath);
45 nodeset = result->nodesetval;
46 for (i = 0; i < nodeset->nodeNr; i++)
48 key = xmlGetProp (nodeset->nodeTab[i], "input-method-name");
49 printf ("input-method-name: %s\n", key);
51 key = xmlGetProp (nodeset->nodeTab[i], "language");
52 printf ("langauge: %s\n", key);
54 key = xmlGetProp (nodeset->nodeTab[i], "extra-id");
57 printf ("extra-id: %s\n", key);
61 xmlXPathFreeObject (result);