⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 masxmlpaz.sqc

📁 解析XML的例子,xmllb2 UNIX DB2
💻 SQC
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************  * 文 件 名: masxmlpaz.sqc * 摘    要: 反洗钱xml报文解析 ******************************************************************************/#define  EXTERN extern#define  CHKDBERR(sChkStr)      if (check_error (sChkStr) != 0) return -1;#define  PAZNODERR(sPazErr)     printf("Parse %s Node Error !!!\n", sPazErr); ErrFlg = 1; return -1;#define  RPTCURNEXT             RptCur = RptCur->next;RptCur = RptCur->next;#define  RPTCURNEXT1            RptCur1 = RptCur1->next;RptCur1 = RptCur1->next;#define  RPTCURNEXT2            RptCur2 = RptCur2->next;RptCur2 = RptCur2->next;#include "btpcomm.h"#include "btpcmmcr.h"#include "cmmafld.h"#include "cmmartn.h"#include <libxml/xmlmemory.h>#include <libxml/parser.h>EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;/* control variables */   char   sMasDBNam[16+1];          /*数据库名称               */   char  sRiCd[15+1];               /* 报送机构编码       15 I */   char  sTxnDt[10+1];              /* 报送日期              I */   long  iSeqNo;                    /* 报送批次              I */   char  sSfId[4+1];                /* 发送正确或错误标识 04   */   long  iFsNm;                     /* 成功发送的文件数        */   long  iErTn;                     /* 错误总数                */   long  iNmEr;                     /* 文件名称错误编号      I */   char  sEfNm[41+1];               /* 错误文件名称       41   */   long  iEfTn;                     /* 错误文件总数            */   long  iFlEr;                     /* 错误文件编号            */   long  iFcEr;                     /* 文件内容错误编号      I */   char  sErLc[64+1];               /* 文件内容错误定位   64   */   char  sErRs[2+1];                /* 文件内容错误原因   02   */   char  sFlgArr[20+1];             /* 控制栏位           20   */   char  sRem1[64+1];               /* 备注1              64   */   char  sRem2[128+1];              /* 备注2             128   */EXEC SQL END DECLARE SECTION;/* globle variables */   char   sMasCod[15+1];            /* 金融机构代码            */   char   sMasDat[10+1];            /* 报送日期                */   char   sMasBat[10+1];            /* 报送批次                */   int    iMasBat;                  /* 报送批次                */   char   sBuff[30+1];   int    ErrFlg;char * ConvertEnc(char *encFrom, char *encTo, const char *in);/******************************************************************************* * main() function: ******************************************************************************/int main(int argc, char **argv){   char   sRptNam[42+1];            /* 回执文件名              */   char   sPath[300+1];             /* 回执路径                */      if (argc != 2)   {      printf("用法: %s 回执报文名\n", argv[0]);      return -1;     }       memset(sPath, '\0', sizeof(sPath));   memset(sRptNam, '\0', sizeof(sRptNam));   memset(sMasCod, '\0', sizeof(sMasCod));   memset(sMasDat, '\0', sizeof(sMasDat));   iMasBat = 0;   ErrFlg = 0;   memcpy(sRptNam, argv[1], sizeof(sRptNam));   sprintf(sPath, "%s/feedback/%s", getenv("MASDIR"), sRptNam);   memcpy(sMasCod, sRptNam + 8, 15);    memcpy(sMasDat, sRptNam + 24, 8);    memcpy(sMasBat, sRptNam + 33, 4);    iMasBat = atoi(sMasBat);    /* 连接反洗钱数据库 */   memset(sMasDBNam, '\0', sizeof(sMasDBNam));      sprintf(sMasDBNam, "%s", getenv("BTPDBS"));   EXEC SQL CONNECT TO :sMasDBNam;   if (sqlca.sqlcode != 0)   {      printf("连接反洗钱数据库失败,程序退出 !!!\n");      return -1;   }   /* 解析回执文件 */   MasParseReport(sPath);   if (!ErrFlg)   {      EXEC SQL COMMIT;      if (sqlca.sqlcode != 0)         EXEC SQL ROLLBACK;             printf("反洗钱回执报文解析完毕 !!!\n");   }   else      printf("反洗钱回执报文解析失败 !!!\n");   EXEC SQL CONNECT RESET;   return 0;}/***************************************************************************** * MasParseReport():  回执解析 *****************************************************************************/int MasParseReport(char *sPath) {    xmlDocPtr RptDoc;    xmlNodePtr RptCur;    xmlChar *sTag;    xmlChar *sMasCnt;    RptDoc = xmlParseFile(sPath);    if (RptDoc == NULL )    {       printf("回执解析失败.\n");       ErrFlg = 1;      return -1;    }    RptCur = xmlDocGetRootElement(RptDoc);    if (RptCur == NULL)    {       printf("回执文件为空,请检查.\n");       xmlFreeDoc(RptDoc);       ErrFlg = 1;      return -1;    }    if (xmlStrcmp(RptCur->name, "FDBK"))    {       printf("回执文件类型错误,请检查.\n");       xmlFreeDoc(RptDoc);       ErrFlg = 1;      return -1;    }    memset(sRiCd, '\0', sizeof(sRiCd));   memset(sTxnDt, '\0', sizeof(sTxnDt));     iSeqNo = 0;                      memset(sSfId, '\0', sizeof(sSfId));    iFsNm = 0;                     iErTn = 0;                    iEfTn = 0;                    MasInit();   RptCur = RptCur->xmlChildrenNode;    while (RptCur != NULL)    {      if (!xmlStrcmp(RptCur->name, "SFID"))      {          sTag = xmlNodeListGetString(RptDoc, RptCur->xmlChildrenNode, 1);                   /* 回执返回成功 */         if (!memcmp(sTag, CMMASUCC, 4))         {                  printf("回执文件返回: 文件发送正确!\n");            memcpy(sSfId, CMMASUCC, 4);            //返回成功标识            RPTCURNEXT;            if ((!xmlStrcmp(RptCur->name, "FSNM")))            {               sMasCnt = xmlNodeListGetString(RptDoc, RptCur->xmlChildrenNode, 1);                iFsNm = atoi(sMasCnt);              //成功发送的文件数               /* 成功回执文件处理 */               printf("回执文件处理中...!\n");               MasIstTbl();            }            else            {               PAZNODERR("FSNM");            }            xmlFree(sTag);            xmlFree(sMasCnt);            break;         }         /* 回执返回文件名称错误 */         else if (!memcmp(sTag, CMMANMFL, 4))         {            printf("回执文件返回: 文件名错误!\n");            memcpy(sSfId, CMMANMFL, 4);            //返回文件名称错误标识            RPTCURNEXT;            if (!xmlStrcmp(RptCur->name, "ERTN"))            {               sMasCnt = xmlNodeListGetString(RptDoc, RptCur->xmlChildrenNode, 1);                iErTn = atoi(sMasCnt);              //错误总数               /* 文件名错误回执处理 */               RPTCURNEXT;               printf("回执文件处理中...!\n");               MasNamErr(RptDoc, RptCur);            }            else            {               PAZNODERR("ERTN");            }            xmlFree(sTag);            xmlFree(sMasCnt);            break;         }         /* 回执返回文件内容错误 */         else if (!memcmp(sTag, CMMACTFL, 4))         {            printf("回执文件返回: 文件内容错误!\n");            memcpy(sSfId, CMMACTFL, 4);            //返回文件内容错误标识            RPTCURNEXT;            if (!xmlStrcmp(RptCur->name, "EFTN"))            {               sMasCnt = xmlNodeListGetString(RptDoc, RptCur->xmlChildrenNode, 1);                iEfTn = atoi(sMasCnt);              //错误文件总数               RPTCURNEXT;               printf("回执文件处理中...!\n");               MasCntErr(RptDoc, RptCur);            }            else            {               PAZNODERR("EFTN");            }            xmlFree(sTag);            xmlFree(sMasCnt);            break;         }      }       RptCur = RptCur->next;    }   xmlFreeDoc(RptDoc);    return 0; } /* 文件名称错误回执数据处理 */int MasNamErr(xmlDocPtr RptDoc, xmlNodePtr RptCur){   xmlNodePtr RptCur1;   xmlChar    *sTag;   xmlChar    *sProp;   char       *sBuff;   /* 文件名称错误 */   if (!xmlStrcmp(RptCur->name, "NMERs"))   {      RptCur = RptCur->xmlChildrenNode;       RptCur = RptCur->next;    }   else   {      PAZNODERR("NMERs");   }      while (RptCur != NULL)    {      /* 错误编号 */      if (!xmlStrcmp(RptCur->name, "NMER"))      {         sProp = xmlGetProp(RptCur, "seqno");         RptCur1 = RptCur->xmlChildrenNode;          RptCur1 = RptCur1->next;       }      else      {         PAZNODERR("NMER");      }   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -