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) |