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

📄 xmlcodec.cpp

📁 可移植的xml库。已经在windows和linux上测试通过。只使用C++ Runtine
💻 CPP
字号:
//xmlcodec.cpp

#include "xml.h"

unsigned CXMLDefCodec::xstrSize(const char *val,unsigned len)
{
	for(unsigned i=len;i--;++val) if(*val=='`' || *val=='<' || *val=='>' || !*val) ++len;
	return len;
}

unsigned CXMLDefCodec::xrawSize(const char *val,unsigned len)
{
	for(const char *s=val;(s=strchr(val,'`'))!=0;)
	{
		++s;
		if(s[1]=='`' || s[1]=='(' || s[1]==')'){++s;--len;}
	}
	return len;
}

//convert '<' as Less'`(', '>' as Greater'`)' and escape '`' by duplicate it'``'
char* CXMLDefCodec::xencode(const char *s,unsigned len,char *t)
{
	for(unsigned i=len;i--;++s,++t)
	{
		switch(*s)
		{
		case '<':*t++='`';*t='(';break;
		case '>':*t++='`';*t=')';break;
		case '`':*t++='`';*t='`';break;
		default:*t=*s;
		}
	}
	return t;
}

char* CXMLDefCodec::xdecode(const char *s,unsigned len,char *t)
{
	for(unsigned i=len;i--;++s,++t)
	{
		if(*s=='`')
		{
			++s;
			switch(*s)
			{
			case '(':--i;*t='<';break;
			case ')':--i;*t='>';break;
			case '`':--i;*t='`';break;
			default:*t++='`';*t=*s;
			}
		}
		else *t = *s;
	}
	return t;
}


unsigned CXMLStdCodec::xstrSize(const char *val,unsigned len)
{
	for(unsigned i=len;i--;++val) if(*val=='&' || *val=='<' || *val=='>') ++len;
	return len;
}

unsigned CXMLStdCodec::xrawSize(const char *val,unsigned len)
{
	for(const char *s=val;(s=strchr(val,'&'))!=0;)
	{
		if(strncmp(s,"&gt;",4)==0){s+=4;len-=3;}
		else if(strncmp(s,"&lt;",4)==0){s+=4;len-=3;}
		else if(strncmp(s,"&amp;",5)==0){s+=5;len-=4;}
		else if(strncmp(s,"&quot;",6)==0){s+=6;len-=5;}
		else ++s;
	}
	return len;
}

//escape '"', '<', '>' and '&'
char* CXMLStdCodec::xencode(const char *s,unsigned len,char *t)
{
	for(unsigned i=len;i--;++s,++t)
	{
		switch(*s)
		{
		case '<':strcpy(t,"&lt;");t+=3;break;
		case '>':strcpy(t,"&gt;");t+=3;break;
		case '&':strcpy(t,"&amp;");t+=4;break;
		case '"':strcpy(t,"&quot;");t+=5;break;
		default:*t=*s;
		}
	}
	return t;
}

char* CXMLStdCodec::xdecode(const char *s,unsigned len,char *t)
{
	for(unsigned i=len;i--;)
	{
		if(*s=='&')
		{
			if(strncmp(s,"&lt;",4)==0){s+=4;i-=3;*t++='<';}
			else if(strncmp(s,"&gt;",4)==0){s+=4;i-=3;*t++='>';}
			else if(strncmp(s,"&amp;",5)==0){s+=5;i-=4;*t++='&';}
			else if(strncmp(s,"&quot;",6)==0){s+=6;i-=5;*t++='"';}
			else *t++= *s++;
		}
		else *t++ = *s++;
	}
	return t;
}

⌨️ 快捷键说明

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