修改tinyxml让其支持解析特殊字符
来源:互联网 发布:马基雅维利主义知乎 编辑:程序博客网 时间:2024/04/28 08:59
修改tinyxmlparser.cpp文件中的部分代码如下:
TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] =
{
{ "&", 5, "&" },
{ "<", 4, "<" },
{ ">", 4, ">" },
{ """, 6, "\"" },
{ "'", 6, "\'" },
{ "&\#955;", 6, "λ" },
{ "&\#934;", 6, "Φ" },
{ "&\#951;", 6, "η" }
};
const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding ){// Presume an entity, and pull it out. TIXML_STRING ent;int i;*length = 0; // Now try to match it.for( i=0; i<NUM_ENTITY; ++i ){if ( strncmp( entity[i].str, p, entity[i].strLength ) == 0 ){assert( strlen( entity[i].str ) == entity[i].strLength );strncat(value, entity[i].chr, strlen(entity[i].chr));*length = strlen(entity[i].chr);return ( p + entity[i].strLength );}}if ( *(p+1) && *(p+1) == '#' && *(p+2) ){unsigned long ucs = 0;ptrdiff_t delta = 0;unsigned mult = 1;if ( *(p+2) == 'x' ){// Hexadecimal.if ( !*(p+3) ) return 0;const char* q = p+3;q = strchr( q, ';' );if ( !q || !*q ) return 0;delta = q-p;--q;while ( *q != 'x' ){if ( *q >= '0' && *q <= '9' )ucs += mult * (*q - '0');else if ( *q >= 'a' && *q <= 'f' )ucs += mult * (*q - 'a' + 10);else if ( *q >= 'A' && *q <= 'F' )ucs += mult * (*q - 'A' + 10 );else return 0;mult *= 16;--q;}}else{// Decimal.if ( !*(p+2) ) return 0;const char* q = p+2;q = strchr( q, ';' );if ( !q || !*q ) return 0;delta = q-p;--q;while ( *q != '#' ){if ( *q >= '0' && *q <= '9' )ucs += mult * (*q - '0');else return 0;mult *= 10;--q;}}if ( encoding == TIXML_ENCODING_UTF8 ){// convert the UCS to UTF-8ConvertUTF32ToUTF8( ucs, value, length );}else{*value = (char)ucs;*length = 1;}return p + delta + 1;}// So it wasn't an entity, its unrecognized, or something like that.*value = *p;// Don't put back the last one, since we return it!//*length = 1;// Leave unrecognized entities - this doesn't really work.// Just writes strange XML.return p+1;}
修改tinyxml.h文件中的部分代码如下:
struct Entity{ const char* str; unsigned intstrLength; char chr[3];//特殊字符的长度一般最长是两个字节,所以这里设置为3的字符串};enum{ NUM_ENTITY = 8,//特殊符号的个数,可以修改 MAX_ENTITY_LENGTH = 6};
- 修改tinyxml让其支持解析特殊字符
- 修改tinyxml让其支持解析特殊字符
- 让python cookie支持特殊字符
- 修改HTK代码,让其支持中文
- XStream解析xml的特殊字符支持
- 修改fckeditor源代码让其支持附件上传(asp.net)
- 对C++ XML解析器TinyXML中关于‘&’字符操作的修改
- xml解析特殊字符
- javascript不让其输入特殊字符
- 修改select2插件让其可以根据输入数据类型决定从几个字符开始发送请求
- android输入法特殊字符修改
- json 特殊字符解析问题
- 设置tomcat 让其支持中文
- XML 和 Internet 支持特殊字符
- perl 正则表达式支持的特殊字符
- 简短生成随机密码~支持特殊字符
- JqueryEasyUI修改DataGrid使其支持多选框
- JqueryEasyUI修改DataGrid使其支持多选框
- nginx启动后Localhost打开指定目录文件
- 正则表达式全部符号解释
- 各种浏览器的userAgent(VS获取)
- Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来
- Win7下Ant的安装与配置
- 修改tinyxml让其支持解析特殊字符
- Java - 反射
- 找增强
- s3c-tvscaler.h in backfire/target/linux/s3c64xx/files-2.6.36/drivers
- Java中Cloneable接口的用法
- Http协议中关于Content-Length的解读
- ofstream和ifstream详细用法
- dns智能解析对网站排名的影响
- tiny6410 在fedora 9下 的samba 配置很详细 (by 星空武哥)