📄 xmlpartool.cpp
字号:
//------------------------------------------------------------------- //文件名:xmlpartool.cpp//创建人:乔立//日 期:2002-02-25//修改人:陈熹//日 期:2002-10-30//描 述:解析XML类//版 本://Copyright (c) 2001 EITOP//------------------------------------------------------------------- #include "xmlpartool.h"char * GetValueFromStr( char *str ){ char *tmpstr = strstr(str, "<"); int i,j; if ( tmpstr == NULL ) return NULL; // 忽略前导分割符 for ( i=0; str+i<tmpstr && (str[i]==' ' || str[i]=='\t' ); i++ ); // 忽略后续分割符 for ( j=tmpstr-str-1; j>=0 && (str[j]==' ' || str[j]=='\t' ); j-- ); if ( j >=i ) return str+i; else return NULL;}void CleanValue( char *str ){ int j; // 忽略后续分割符 if ( str == NULL ) return; for ( j=strlen(str)-1; j>=0 && (str[j]==' ' || str[j]=='\t' ); j-- ); if ( j<(int)strlen(str)-1 ) str[j] = 0; }char * GetAttrFromStr( char *str ){ int i; // 忽略节点名 for ( i=0; str[i] && str[i]!=' ' && str[i]!='\t' ; i++ ); if ( str[i] ){ str[i++] = 0; } else return NULL; // 忽略分割符 for ( ; str[i] && (str[i]==' ' || str[i]=='\t' ); i++ ); if ( str[i] ) return str+i; else return NULL;}//------------------------------------------------------------------- //函数名: UnPackMsg//功能描述: 拆报//作 者: 乔立//日 期: 2002-02-25//输 入: char *RecvStr// char RecvMsg[][100]//修 改://日 期://版 本://------------------------------------------------------------------- int UnPackMsg( char *RecvStr , char RecvMsg[][100] ){ int Ret=0; int i=0; int j=0; while( (Ret = FindSubStr( RecvStr+i , "." )) != -1 ) { memcpy( RecvMsg[j] , RecvStr+i , Ret); RecvMsg[j][Ret] = 0; j++; i = i+Ret+1; } return(j);}//------------------------------------------------------------------- //函数名: FindSubStr//功能描述: 查找子串//作 者: 乔立//日 期: 2002-02-25//输 入: char *Str : 被查找串// char *SubStr : 子串//修 改://日 期://版 本://------------------------------------------------------------------- int FindSubStr( char *Str , char *SubStr ){ char *pdest = strstr( Str, SubStr ); return (pdest == NULL) ? -1 : (int)(pdest - Str);}BOOL SelfData( char *value ) { char *pstr = strstr( value, XML_INTROOT ); if ( pstr ) { return TRUE; } else { return FALSE; }}//------------------------------------------------------------------- //函数名: ThrowMsgException//功能描述: 抛出异常//作 者: 乔立//日 期: 2002-02-25//输 入: int iCode : 错误码// char *lpErrText :错误说明//修 改://日 期://版 本://------------------------------------------------------------------- void ThrowMsgException( int iCode, char *lpErrText ){ CommException e(iCode, lpErrText); throw(e);}// 判断字符 chr 是否存在于字符串 str 中BOOL NoIn( char *str, char chr ) { int i; for ( i=0; str[i] && str[i] != chr; i++ ); if ( str[i] != chr ) { return TRUE; } else { return FALSE; }}void TrimDeli( char *buf ) // 删除空格等分割符{ int i, j; for ( i=strlen(buf); i && (buf[i]==' ' || buf[i]=='(' || buf[i]==')' ); i-- ); buf[i] = 0; for ( i=0; buf[i] && (buf[i]==' ' || buf[i]=='(' || buf[i]==')' ); i++ ); for ( j=0; j+i < (int)strlen(buf) ; j++ ) { buf[j] = buf[j+i]; } buf[j] = 0;}int SPACESTR( char *str ){ int i; for ( i=0; str[i]==' '; i++ ); if ( str[i] == 0 ) // 全空格串 return 1; else return 0;}char *SearchCNAPSTag( char *cnapsText, char *TagName ){ char *p, buf[6]; if ( strlen(TagName) > 3 ) { return NULL; } if ( strncmp(cnapsText, "3::", 3) == 0 ) // Text Head { p = cnapsText+2; } else { p = cnapsText; } memset(buf, 0, sizeof(buf)); strcpy(buf, ":"); strcat(buf, TagName); strcat(buf, ":"); while (1) { if ( strncmp(p, buf, 5) == 0 ) // Find tag { return p+5; } else { for ( p+=5; *p && *p!=':' && *p!='}' ; p++ ); if ( *p != ':' ) { return NULL; } } }}////////////////////////////////////////////////////////// * 功 能: 用指定的字符将字符串填充到指定长度// * 入口参数:// * buf: 源串// * len: 填充后目标串长度// * untrimtype: 对齐方式(0 -- 左对齐, 1 -- 右对齐)// * untrimcode: 用来填充的字符/////////////////////////////////////////////////////////void UnTrim( char *buf, int len, int untrimtype, char untrimcode ){ int tlen = strlen(buf); if ( untrimtype == 0 ) { // 左对齐 for ( int i=tlen; i<len; i++ ) { buf[i] = untrimcode; } buf[len] = 0; } else { // 右对齐 char *tmpbuf = new char[len]; memcpy ( tmpbuf, buf, tlen ); int i; for ( i=0; i<len-tlen; i++ ) { buf[i] = untrimcode; } memcpy ( buf+i, tmpbuf, tlen ); delete tmpbuf; buf[len] = 0; }}////////////////////////////////////////////////////// Function: RTrim()// Purpose: 删除字符串右边的空格和 tab字符. // Author: HCH // Date: 2002.03.26////////////////////////////////////////////////////void RTrim(char *str){ char *p; p = str + strlen(str) - 1; while (p >= str && (*p == ' ' || *p == '\t') ) { *p = 0; p--; }; return;}//================================================// Function: LTrim()// Purpose: 删除字符串左边的空格和 tab字符. // Author: HCH // Date: 2002.03.26//================================================void LTrim(char *str){ char *p; p = str; while ( (*p != '\0') && (*p == ' ' || *p == '\t') ) p++; strcpy(str, p); return;}//================================================// Function: trim()// Purpose: 删除字符串左右两边的空格和 tab字符. // Author: HCH // Date: 2002.03.26//================================================void trim(char *str){ LTrim(str); RTrim(str); return;}//================================================// Function: TrimAll()// Purpose: 删除字符串左右两边的空格和 tab字符. // Author: HCH // Date: 2002.03.26//================================================void TrimAll(char *strBuffer, char *strFlag){ char strTemp[1024]; int i, j, iFlag; int iStrLen; char *p; if (strFlag[0] != 'A' && strFlag[0] != 'L' && strFlag[0] != 'R') return; iStrLen = strlen(strBuffer); memset(strTemp, 0, sizeof(strTemp)); j = 0; iFlag = 0; if (strFlag[0] == 'A') { TrimAll(strBuffer, "L"); TrimAll(strBuffer, "R"); } else { if (strFlag[0] == 'L') /* 去左空格 */ i = 0; else i = iStrLen - 1; while (1) { if ( (strFlag[0] == 'L' && i == iStrLen) || (strFlag[0] == 'R' && i < 0) ) break; if (strBuffer[i] == ' ' && iFlag == 0) ; else { strTemp[j++] = strBuffer[i]; if (iFlag == 0) iFlag = 1; } if (strFlag[0] == 'L') /* 去左空格 */ i ++; else i --; } strTemp[j] = '\0'; strcpy(strBuffer, strTemp); if (strFlag[0] == 'R') /* 去右空格 */ { printf("[%s]()\n", strBuffer); iStrLen = strlen(strBuffer); p = strBuffer; memset(strTemp, 0, sizeof(strTemp)); i = 1; while(*p) { strTemp[iStrLen - i] = *p; p++; i++; } strcpy(strBuffer, strTemp); } } return;}//================================================// Function: GetSysDate()// Purpose: 获取形如 "YYYYMMDD" 的 8 位系统日期// Author: HCH // Date: 2002.03.28//================================================void GetSysDate(char *strSysDate){ time_t ltime; struct tm st_time; ltime = time(NULL); memcpy(&st_time, localtime(<ime), sizeof(st_time)); sprintf(strSysDate, "%4d%02d%02d", st_time.tm_year + 1900, st_time.tm_mon + 1, st_time.tm_mday); return;}char *TimeFormat(struct tm *ptm,char *format){ static char buff[TIMEBUF_LEN]; int ctl_flg = 0; int i = 0; int year; if (format == NULL) return (char *)ptm; else if (strcmp(format, "ASC") == 0) return asctime(ptm); do { if ( ctl_flg ) { ctl_flg-=1; switch(*format) { case 'y' : year = 1900 + ptm->tm_year; sprintf(&buff[i], "%d", year); i = i+4; break; case 'm' : sprintf(&buff[i], "%02d",ptm->tm_mon+1); i = i+2; break; case 'd' : sprintf(&buff[i], "%02d", ptm->tm_mday); i = i+2; break; case 'h' : sprintf(&buff[i], "%02d", ptm->tm_hour); i = i+2; break; case 'i' : sprintf(&buff[i], "%02d", ptm->tm_min); i = i+2; break; case 's' : sprintf(&buff[i], "%02d", ptm->tm_sec); i = i+2; break; case 'n' : buff[i--] = '\n'; i = i+2; break; default : buff[i] = '%', buff[i+1] = *format; i = i+2; break; } } else if (*format == '%') ctl_flg = 1; else buff[i++] = *format; } while(*(++format) != 0); buff[i] = 0; return buff;}char *get_time(char *format){ time_t clck; clck = time((time_t *)0); return TimeFormat(localtime(&clck), format);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -