X-Git-Url: http://git.chise.org/gitweb/?p=m17n%2Fm17n-test.git;a=blobdiff_plain;f=mim-xml.c;h=ecd621c176b4eba8ff7b7552e2afa702733389bd;hp=e9460b20c85a64ebc570097fbdaecafc5de1533f;hb=cd803399122dd9368b95036960dd3b130381db4e;hpb=5c3f23683368494c7e7793a8eece1195ed246934 diff --git a/mim-xml.c b/mim-xml.c index e9460b2..ecd621c 100644 --- a/mim-xml.c +++ b/mim-xml.c @@ -1,4 +1,4 @@ -/* XML 解析 */ +/* XML の解析 */ #include #include @@ -7,9 +7,10 @@ #include void -error_exit (char *fmt, char *arg) +error_exit (char *fmt, const char *arg) { fprintf (stderr, fmt, arg); + fprintf (stderr, "\n"); exit (1); } @@ -20,16 +21,49 @@ main (int argc, char **argv) XPathContextPtr context; xmlXPathObjectPtr result; xmlChar *xpath = (xmlChar *) "//input-method"; - xmlChar *key; xmlNodeSetPtr nodeset; #endif - int i; + const xmlChar *name, *value; xmlTextReaderPtr reader; + int depth; - reader = xmlReaderForFile (argv[1], "utf-8", 0); + reader = xmlReaderForFile (argv[1], "utf-8", + XML_PARSE_NOBLANKS + /*XML_PARSE_XINCLUDE|XML_PARSE_NOENT*/); + /*xmlTextReaderRelaxNGValidate (reader, argv[2]);*/ + if (xmlTextReaderRead (reader) != 1) + error_exit ("Read error: %s", argv[1]); + if (! (name = xmlTextReaderConstLocalName (reader))) + error_exit ("No %s node", "input-method"); + printf ("%s", (char *) name); + xmlTextReaderRead (reader); + if (! (name = xmlTextReaderConstLocalName (reader))) + error_exit ("No inner node: %s", "tags"); + printf (" %s", (char *) name); + xmlTextReaderRead (reader); + printf (" %s", (char *) xmlTextReaderConstLocalName (reader)); + xmlTextReaderRead (reader); + printf (" %s", (char *) xmlTextReaderConstLocalName (reader)); + depth = xmlTextReaderDepth(reader); + value = xmlTextReaderConstValue (reader); + printf (" \"%s\"", (char *) value); + xmlTextReaderRead (reader); + xmlTextReaderRead (reader); + xmlTextReaderRead (reader); + value = xmlTextReaderConstValue (reader); + printf (" \"%s\"", (char *) value); + do { xmlTextReaderRead (reader); } + while (xmlTextReaderNodeType (reader) != XML_READER_TYPE_TEXT); + value = xmlTextReaderConstValue (reader); + if (depth == xmlTextReaderDepth(reader)) + printf (" \"%s\"", (char *) value); + printf ("\n"); + +#if 0 xmlTextReaderRelaxNGValidate (reader, argv[2]); while ((i = xmlTextReaderRead (reader)) == 1); printf ("%d\n\n", i); +#endif #if 0 doc = xmlParseFile (argv[1]);