kxpath1.c
最終更新:2009/11/25
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: }
KAKU PROJECT (2009) |