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

📄 xmlpartool.cpp

📁 液晶电视完整代码可实现人机界面
💻 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(&ltime), 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 + -