我是靠谱客的博主 着急路灯,最近开发中收集的这篇文章主要介绍对C++ XML解析器TinyXML中关于‘&’字符操作的修改,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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.         
*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节点内容含有‘&’符号的过滤问题。

2.当向xml文件中写入‘&’字符(而不是“&”)时同样会有问题,TinyXML库同样会做处理,它会把‘&’替换为“&”,见文件 tinyxmlparser.cpp中
TiXmlBase::Entity TiXmlBase::entity[ TiXmlBase::NUM_ENTITY ] = 
{
{ "&",  5, '&' },
{ "&lt;",   4, '<' },
{ "&gt;",   4, '>' },
{ "&quot;", 6, '"' },
{ "&apos;", 6, ''' }
};
当你不需要这样的处理时可以修改 tinyxml.cpp中Line85,把
outString->append( entity[0].str, entity[0].strLength );

改为

outString->append( "&", 1);
重新编译即可解决此问题。

最后

以上就是着急路灯为你收集整理的对C++ XML解析器TinyXML中关于‘&’字符操作的修改的全部内容,希望文章能够帮你解决对C++ XML解析器TinyXML中关于‘&’字符操作的修改所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部