C# XML字符串包含特殊字符的處理轉(zhuǎn)換方法小結(jié)
為了能正常輸出XML格式的內(nèi)容,必須要對不被XML允許的那些特殊字符進行轉(zhuǎn)換。本文介紹的正是如何使用C#判斷XML字符串是否含特殊字符并進行轉(zhuǎn)換。
以下是幾個特殊字符的對應(yīng)實體。
< |
< |
小于號 |
> |
> |
大于號 |
& |
& |
和 |
' |
' |
單引號 |
" |
" |
雙引號 |
在C#中,直接調(diào)用C#提供的方法,保存之后就會自動將特殊字符轉(zhuǎn)為對應(yīng)實體:
string s =System.Security.SecurityElement.Escape(s);
或者
將內(nèi)容放在<![CDATA[ ]]>中,例如<![CDATA[2]]> ,CDATA里面的內(nèi)容在XmlDocument 解析時會自動忽略掉
如果是很多有區(qū)域都有特殊內(nèi)容,可以參考下面的代碼通過函數(shù)來實現(xiàn)替換。
其實挺簡單,只需用下面的這個函數(shù),即可判斷及轉(zhuǎn)換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視為特殊字符的字符并不多,只有三個:<、&、>,因此只需把這三個字符進行轉(zhuǎn)換即可,而對單雙引號和換行符可轉(zhuǎn)換也可不轉(zhuǎn)換。
使用方法:
1、首先要導(dǎo)入命名空間System.Text;,因為要用到StringBuilder方法。
2、判斷及轉(zhuǎn)換字符串時直接使用函數(shù)XmlString(),如:
string sText = XmlString(sText);
如果要輸出單雙引號和換行符,那么要對這幾個字符進行轉(zhuǎn)義,則要這樣使用函數(shù):
string sText = XmlString(sText, true);
總結(jié)
通過上述方法的使用,在網(wǎng)頁上輸出XML格式字符串或者生成一個可用的XML文件,就不會再有問題了。
相關(guān)文章
C# List 并發(fā)丟數(shù)據(jù)問題原因及解決方案
這篇文章主要介紹了C# List 并發(fā)丟數(shù)據(jù)問題原因及解決方案,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-02-02C# 如何設(shè)置label(標簽)控件的背景顏色為透明
這篇文章主要介紹了C# 如何設(shè)置label(標簽)控件的背景顏色為透明,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2020-10-10C# 使用Free Spire.Presentation 實現(xiàn)對PPT插入、編輯、刪除表格
小編發(fā)現(xiàn)使用.NET組件——Free Spire.Presentation,在C#中添加該產(chǎn)品DLL文件,可以簡單快速地實現(xiàn)對演示文稿的表格插入、編輯和刪除等操作,具體實現(xiàn)代碼大家參考下本文吧2017-09-09C#操作IIS程序池及站點的創(chuàng)建配置實現(xiàn)代碼
最近在做一個WEB程序的安裝包;對一些操作IIS進行一個簡單的總結(jié);主要包括對IIS進行站點的新建以及新建站點的NET版本的選擇,還有針對IIS7程序池的托管模式以及版本的操作2013-03-03