C# XML字符串包含特殊字符的處理轉(zhuǎn)換方法小結(jié)
為了能正常輸出XML格式的內(nèi)容,必須要對(duì)不被XML允許的那些特殊字符進(jìn)行轉(zhuǎn)換。本文介紹的正是如何使用C#判斷XML字符串是否含特殊字符并進(jìn)行轉(zhuǎn)換。
以下是幾個(gè)特殊字符的對(duì)應(yīng)實(shí)體。
|
< |
< |
小于號(hào) |
|
> |
> |
大于號(hào) |
|
& |
& |
和 |
|
' |
' |
單引號(hào) |
|
" |
" |
雙引號(hào) |
在C#中,直接調(diào)用C#提供的方法,保存之后就會(huì)自動(dòng)將特殊字符轉(zhuǎn)為對(duì)應(yīng)實(shí)體:
string s =System.Security.SecurityElement.Escape(s);
或者
將內(nèi)容放在<![CDATA[ ]]>中,例如<![CDATA[2]]> ,CDATA里面的內(nèi)容在XmlDocument 解析時(shí)會(huì)自動(dòng)忽略掉
如果是很多有區(qū)域都有特殊內(nèi)容,可以參考下面的代碼通過函數(shù)來實(shí)現(xiàn)替換。
其實(shí)挺簡(jiǎn)單,只需用下面的這個(gè)函數(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視為特殊字符的字符并不多,只有三個(gè):<、&、>,因此只需把這三個(gè)字符進(jìn)行轉(zhuǎn)換即可,而對(duì)單雙引號(hào)和換行符可轉(zhuǎn)換也可不轉(zhuǎn)換。
使用方法:
1、首先要導(dǎo)入命名空間System.Text;,因?yàn)橐玫絊tringBuilder方法。
2、判斷及轉(zhuǎn)換字符串時(shí)直接使用函數(shù)XmlString(),如:
string sText = XmlString(sText);
如果要輸出單雙引號(hào)和換行符,那么要對(duì)這幾個(gè)字符進(jìn)行轉(zhuǎn)義,則要這樣使用函數(shù):
string sText = XmlString(sText, true);
總結(jié)
通過上述方法的使用,在網(wǎng)頁(yè)上輸出XML格式字符串或者生成一個(gè)可用的XML文件,就不會(huì)再有問題了。
相關(guān)文章
輕松學(xué)習(xí)C#的foreach迭代語(yǔ)句
輕松學(xué)習(xí)C#的foreach迭代語(yǔ)句, C#語(yǔ)言提供了一個(gè)for語(yǔ)句循環(huán)的捷徑,而且還促進(jìn)了集合類的更為一致,就是本文提到的foreach語(yǔ)句,感興趣的小伙伴們可以參考一下2015-11-11
C# 如何使用OpcUaHelper讀寫OPC服務(wù)器
這篇文章給大家介紹C# 如何使用OpcUaHelper讀寫OPC服務(wù)器,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-12-12
詳解C# 網(wǎng)絡(luò)編程系列:實(shí)現(xiàn)類似QQ的即時(shí)通信程序
本篇主要介紹了c#實(shí)現(xiàn)類似QQ的即時(shí)通信程序 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12
C#實(shí)現(xiàn)將字符串轉(zhuǎn)換成日期格式的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將字符串轉(zhuǎn)換成日期格式的方法,涉及C#操作時(shí)間及字符串的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-05-05
C#中Abstract方法和Virtual方法的區(qū)別
這篇文章介紹了C#中Abstract方法和Virtual方法的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04

