1. 程式人生 > 程式設計 >C# XML字串包含特殊字元的處理轉換方法小結

C# XML字串包含特殊字元的處理轉換方法小結

為了能正常輸出XML格式的內容,必須要對不被XML允許的那些特殊字元進行轉換。本文介紹的正是如何使用C#判斷XML字串是否含特殊字元並進行轉換。

以下是幾個特殊字元的對應實體。

<

<

小於號

&gt;

>

大於號

&amp;

&

&apos;

'

單引號

&quot;

"

雙引號

在C#中,直接呼叫C#提供的方法,儲存之後就會自動將特殊字元轉為對應實體:

string s =System.Security.SecurityElement.Escape(s);

或者

將內容放在<![CDATA[ ]]>中,例如<![CDATA[2]]> ,CDATA裡面的內容在XmlDocument 解析時會自動忽略掉

如果是很多有區域都有特殊內容,可以參考下面的程式碼通過函式來實現替換。

其實挺簡單,只需用下面的這個函式,即可判斷及轉換XML字串裡的特殊字元。

C# 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("&lt;");
  else if (chr == '>')
   sb.Append("&gt;");
  else if (chr == '&')
   sb.Append("&amp;");

  // special handling for quotes
  else if (isAttribute && chr == '\"')
   sb.Append("&quot;");
  else if (isAttribute && chr == '\'')
   sb.Append("&apos;");

  // Legal sub-chr32 characters
  else if (chr == '\n')
   sb.Append(isAttribute ? "&#xA;" : "\n");
  else if (chr == '\r')
   sb.Append(isAttribute ? "&#xD;" : "\r");
  else if (chr == '\t')
   sb.Append(isAttribute ? "&#x9;" : "\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檔案,就不會再有問題了。