C# XML字串包含特殊字元的處理轉換方法小結
阿新 • • 發佈:2020-07-02
為了能正常輸出XML格式的內容,必須要對不被XML允許的那些特殊字元進行轉換。本文介紹的正是如何使用C#判斷XML字串是否含特殊字元並進行轉換。
以下是幾個特殊字元的對應實體。
< |
< |
小於號 |
> |
> |
大於號 |
& |
& |
和 |
' |
' |
單引號 |
" |
" |
雙引號 |
在C#中,直接呼叫C#提供的方法,儲存之後就會自動將特殊字元轉為對應實體:
string s =System.Security.SecurityElement.Escape(s);
或者
將內容放在<![CDATA[ ]]>中,例如<![CDATA[2]]> ,CDATA裡面的內容在XmlDocument 解析時會自動忽略掉
如果是很多有區域都有特殊內容,可以參考下面的程式碼通過函式來實現替換。
其實挺簡單,只需用下面的這個函式,即可判斷及轉換XML字串裡的特殊字元。
核心程式碼
/// <summary> /// Turns a string into a properly XML Encoded string. /// Uses simple string replacement. /// /// Also see XmlUtils.XmlString() which uses XElement /// to handle additional extended characters. /// </summary> /// <param name="text">Plain text to convert to XML Encoded string</param> /// <param name="isAttribute"> /// If true encodes single and double quotes,CRLF and tabs. /// When embedding element values quotes don't need to be encoded. /// When embedding attributes quotes need to be encoded. /// </param> /// <returns>XML encoded string</returns> /// <exception cref="InvalidOperationException">Invalid character in XML string</exception> public static string XmlString(string text,bool isAttribute = false) { var sb = new StringBuilder(text.Length); foreach (var chr in text) { if (chr == '<') sb.Append("<"); else if (chr == '>') sb.Append(">"); else if (chr == '&') sb.Append("&"); // special handling for quotes else if (isAttribute && chr == '\"') sb.Append("""); else if (isAttribute && chr == '\'') sb.Append("'"); // Legal sub-chr32 characters else if (chr == '\n') sb.Append(isAttribute ? "
" : "\n"); else if (chr == '\r') sb.Append(isAttribute ? "
" : "\r"); else if (chr == '\t') sb.Append(isAttribute ? "	" : "\t"); else { if (chr < 32) throw new InvalidOperationException("Invalid character in Xml String. Chr " + Convert.ToInt16(chr) + " is illegal."); sb.Append(chr); } } return sb.ToString(); }
被XML視為特殊字元的字元並不多,只有三個:<、&、>,因此只需把這三個字元進行轉換即可,而對單雙引號和換行符可轉換也可不轉換。
使用方法:
1、首先要匯入名稱空間System.Text;,因為要用到StringBuilder方法。
2、判斷及轉換字串時直接使用函式XmlString(),如:
string sText = XmlString(sText);
如果要輸出單雙引號和換行符,那麼要對這幾個字元進行轉義,則要這樣使用函式:
string sText = XmlString(sText,true);
總結
通過上述方法的使用,在網頁上輸出XML格式字串或者生成一個可用的XML檔案,就不會再有問題了。