概述
1.在
TinyXML中‘&’作为一个保留字符处理,当xml文档中存在单独的‘&’字符(而不是“&”),它在读取时会直接置为空字符。
解决办法:修改tinyxmlparser.cpp中
Line 528, 函数const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding )实现代码中有:
// 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.
源码中将*length=1注释掉了,直接导致特殊字符‘&’ 被过滤,只需要将*length=1放开注释即可,如下:
// So it wasn't an entity, its unrecognized, or something like that.
源码中将*length=1注释掉了,直接导致特殊字符‘&’ 被过滤,只需要将*length=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. no no no by yangw
// Just writes strange XML.
重新编译即可解决XML节点内容含有‘&’符号的过滤问题。
重新编译即可解决XML节点内容含有‘&’符号的过滤问题。
2.当向xml文件中写入‘&’字符(而不是“&”)时同样会有问题,TinyXML库同样会做处理,它会把‘&’替换为“&”,见文件
tinyxmlparser.cpp中
TiXmlBase::Entity TiXmlBase::entity[ TiXmlBase::NUM_ENTITY ] =
{
{ "&", 5, '&' },
{ "<", 4, '<' },
{ ">", 4, '>' },
{ """, 6, '"' },
{ "'", 6, ''' }
};
{
{ "&", 5, '&' },
{ "<", 4, '<' },
{ ">", 4, '>' },
{ """, 6, '"' },
{ "'", 6, ''' }
};
当你不需要这样的处理时可以修改
tinyxml.cpp中Line85,把
outString->append( entity[0].str, entity[0].strLength );
改为
outString->append( "&", 1);
重新编译即可解决此问题。
最后
以上就是着急路灯为你收集整理的对C++ XML解析器TinyXML中关于‘&’字符操作的修改的全部内容,希望文章能够帮你解决对C++ XML解析器TinyXML中关于‘&’字符操作的修改所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复