XML 特殊字符 編碼 c++


XML 特殊字符 處理 c++

在XML文件中,如果內容包含一些特殊字符會導致XML文件無法解析。


1. 可以對特殊字符直接進行轉義

以下5個字符爲需要進行轉義的字符

 字符  轉義後 編碼 
 &  & &#38 
 ' '  &#39 
 " "  &#34 
 > >  &#62 
 < &lt;  &#60 


代碼如下:

//函數將XML 中的特殊字符 & 轉換爲 &amp;
//可擴展判斷

typedef unsigned char BYTE;

void XMLEncodeString(char *&desBuffer, int &dSize, char *srcBuffer, const int &sSize)
{
    char *m_XmlSpeChar[256];
    m_XmlSpeChar[34] = "&quot;";           //"  34
    m_XmlSpeChar[38] = "&amp;";            //&  38
    m_XmlSpeChar[39] = "&apos;";           //'  39
    m_XmlSpeChar[60] = "&lt;";            //<  60
    m_XmlSpeChar[62] = "&gt;";            //>  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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章