/* * kxpath1.c */ #define USAGE "Usage: kxpath1 " #include "mystab.h" #include "myio_apr.h" #include "myio_xml.h" int apr_my_main ( int ac , char **av , apr_file_t * astdin , apr_file_t * astdout , apr_file_t * astderr , apr_pool_t * pool ) { int error_flag = 0; char *in_filename = NULL; char *expr = NULL; MYIO *in = NULL; MYIO *out = NULL; xmlDocPtr srcDom = NULL; if (ac < 3) { apr_file_printf(astderr, "%s\n", USAGE); error_flag = 1; goto _FINALLY_; } in_filename = av[1]; expr = av[2]; /* 入力ファイルのオープン */ in = MYIO_fp_open(in_filename, APR_FOPEN_READ|APR_FOPEN_BINARY, APR_OS_DEFAULT, pool); if (! in) { apr_file_printf(astderr, "ERROR: MYIO_fp_open: %s ", in_filename); error_flag = 1; goto _FINALLY_; } out = MYIO_fp_new(astdout, 1, pool); my_xml_init(); srcDom = my_xml_read(in); if (!srcDom) { apr_file_printf(astderr, "ERROR: my_xml_read [%s] ", in_filename); error_flag = 1; goto _FINALLY_; } { int res = my_xml_search_do(srcDom, expr, print_xpath_cb, out, NULL, 0); if (!res) { error_flag = 1; apr_file_printf(astderr, "ERROR: my_xml_xpath_do "); } } _FINALLY_: xmlFreeDoc(srcDom); my_xml_clear(); if (in) { MYIO_fp_close(in); in = NULL; } if (error_flag) { apr_file_printf(astderr, "failed.\n"); return 1; /* 異常終了 */ } apr_file_printf(astdout, "done.\n"); return 0; /* 正常終了 */ }