XML 特殊字符 处理 c++
在XML文件中,如果内容包含一些特殊字符会导致XML文件无法解析。
1. 可以对特殊字符直接进行转义
以下5个字符为需要进行转义的字符
字符 | 转义后 | 编码 |
& | & | & |
' | ' | ' |
" | " | " |
> | > | > |
< | < | < |
代码如下:
//函数将XML 中的特殊字符 & 转换为 & //可扩展判断 typedef unsigned char BYTE; void XMLEncodeString(char *&desBuffer, int &dSize, char *srcBuffer, const int &sSize) { char *m_XmlSpeChar[256]; m_XmlSpeChar[34] = """; //" 34 m_XmlSpeChar[38] = "&"; //& 38 m_XmlSpeChar[39] = "'"; //' 39 m_XmlSpeChar[60] = "<"; //< 60 m_XmlSpeChar[62] = ">"; //> 62 dSize = 0; string tempDesStr; for(int i = 0; i < sSize; i++) { BYTE tempB = (BYTE)srcBuffer[i]; if ( tempB == 38 ) { tempDesStr += m_XmlSpeChar[tempB]; dSize += strlen(m_XmlSpeChar[tempB]); } else { tempDesStr += srcBuffer[i]; dSize++; } } desBuffer = (char *)malloc(sizeof(char)*dSize); memcpy(desBuffer,tempDesStr.c_str(),dSize); }
2. 将内容放至CDATA中。
CDATA 以"<![CDATA[" 标记开始,以"]]>"标记结束 例如:
<?xml version="1.0" encoding="utf-8" ?> <SQL> <![CDATA[SELECT * FROM Account WHERE ID > 5]]> </SQL>