kxpath1.c

最終更新:2009/11/25

kxpath1.c

001: /*
002:  * kxpath1.c
003:  */
004: 
005: #define USAGE "Usage: kxpath1 <in_file> <expr>"
006: 
007: #include "mystab.h"
008: #include "myio_apr.h"
009: #include "myio_xml.h"
010: 
011: int apr_my_main (
012:   int ac
013:   , char **av
014:   , apr_file_t * astdin
015:   , apr_file_t * astdout
016:   , apr_file_t * astderr
017:   , apr_pool_t * pool
018: ) {
019: 
020:   int error_flag = 0;
021:   
022:   char *in_filename = NULL;
023:   char *expr = NULL;
024: 
025:   MYIO *in = NULL;
026:   MYIO *out = NULL;
027:   
028:   xmlDocPtr srcDom = NULL;
029:   
030:   if (ac < 3) {
031:     apr_file_printf(astderr, "%s\n", USAGE);
032:     error_flag = 1;
033:     goto _FINALLY_;
034:   }
035:   
036:   in_filename = av[1];
037:   expr = av[2];
038:   
039:   /* 入力ファイルのオープン */
040:   
041:   in = MYIO_fp_open(in_filename, APR_FOPEN_READ|APR_FOPEN_BINARY, APR_OS_DEFAULT, pool);
042:   if (! in) {
043:     apr_file_printf(astderr, "ERROR: MYIO_fp_open: %s ", in_filename);
044:     error_flag = 1;
045:     goto _FINALLY_;
046:   }
047:   
048:   out = MYIO_fp_new(astdout, 1, pool);
049:   
050:   my_xml_init();
051:   
052:   srcDom = my_xml_read(in);
053:   if (!srcDom) {
054:     apr_file_printf(astderr, "ERROR: my_xml_read [%s] ", in_filename);
055:     error_flag = 1;
056:     goto _FINALLY_;
057:   }
058:   
059:   {
060:     int res = my_xml_search_do(srcDom, expr, print_xpath_cb, out, NULL, 0);
061:     if (!res) {
062:       error_flag = 1;
063:       apr_file_printf(astderr, "ERROR: my_xml_xpath_do ");
064:     }
065:   }
066:   
067:   _FINALLY_:
068:   
069:   xmlFreeDoc(srcDom);
070:   
071:   my_xml_clear();
072:   
073:   if (in) {
074:     MYIO_fp_close(in);
075:     in = NULL;
076:   }
077:   
078:   if (error_flag) {
079:     apr_file_printf(astderr, "failed.\n");
080:     return 1; /* 異常終了 */
081:   }
082:   
083:   apr_file_printf(astdout, "done.\n");
084:   return 0; /* 正常終了 */
085:   
086: }
Copyright (C) KAKU PROJECT (2009)KAKU PROJECT (2009)