技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

C#判斷XML字符串是否含特殊字符并進行轉(zhuǎn)換

作者:admin    時間:2020-4-9 21:56:5    瀏覽:

今天用C#輸出XML文件時,發(fā)現(xiàn)報錯,經(jīng)過反復(fù)檢查調(diào)試,發(fā)現(xiàn)是因為某處內(nèi)容含有某些特殊字符,這些特殊字符是在XML里不被允許的。

某些特殊字符在XML里不被允許

某些特殊字符在XML里不被允許

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

其實挺簡單,只需用下面的這個函數(shù),即可判斷及轉(zhuǎn)換XML字符串里的特殊字符。

C# XML Encoded

download

代碼分析:

///  <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視為特殊字符的字符并不多,只有三個:<、&、>,因此只需把這三個字符進行轉(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文件,就不會再有問題了。

標(biāo)簽: asp.net  XML  CSharp  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */