欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# XML字符串包含特殊字符的處理轉(zhuǎn)換方法小結(jié)

 更新時(shí)間:2020年07月01日 12:39:51   作者:webkaka  
今天用C#輸出XML文件時(shí),發(fā)現(xiàn)報(bào)錯(cuò),經(jīng)過反復(fù)檢查調(diào)試,發(fā)現(xiàn)是因?yàn)槟程巸?nèi)容含有某些特殊字符,這些特殊字符是在XML里不被允許的

為了能正常輸出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("&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視為特殊字符的字符并不多,只有三個(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)文章

  • C#爬取動(dòng)態(tài)網(wǎng)頁(yè)上信息得流程步驟

    C#爬取動(dòng)態(tài)網(wǎng)頁(yè)上信息得流程步驟

    動(dòng)態(tài)內(nèi)容網(wǎng)站使用 JavaScript 腳本動(dòng)態(tài)檢索和渲染數(shù)據(jù),爬取信息時(shí)需要模擬瀏覽器行為,否則獲取到的源碼基本是空的,這篇文章主要給大家詳細(xì)介紹了C#爬取動(dòng)態(tài)網(wǎng)頁(yè)上信息得流程步驟,需要的朋友可以參考下
    2024-10-10
  • C#中實(shí)現(xiàn)插入、刪除Excel分頁(yè)符的方法

    C#中實(shí)現(xiàn)插入、刪除Excel分頁(yè)符的方法

    這篇文章主要給大家介紹了關(guān)于在C#中實(shí)現(xiàn)插入、刪除Excel分頁(yè)符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • c# 網(wǎng)絡(luò)編程之tcp

    c# 網(wǎng)絡(luò)編程之tcp

    這篇文章主要介紹了c# 網(wǎng)絡(luò)編程之tcp的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#圖表算法之最短路徑

    C#圖表算法之最短路徑

    本文詳細(xì)講解了C#圖表算法之最短路徑,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C# List 并發(fā)丟數(shù)據(jù)問題原因及解決方案

    C# List 并發(fā)丟數(shù)據(jù)問題原因及解決方案

    這篇文章主要介紹了C# List 并發(fā)丟數(shù)據(jù)問題原因及解決方案,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C# 如何設(shè)置label(標(biāo)簽)控件的背景顏色為透明

    C# 如何設(shè)置label(標(biāo)簽)控件的背景顏色為透明

    這篇文章主要介紹了C# 如何設(shè)置label(標(biāo)簽)控件的背景顏色為透明,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-10-10
  • C#實(shí)現(xiàn)根據(jù)年份計(jì)算生肖屬相的方法

    C#實(shí)現(xiàn)根據(jù)年份計(jì)算生肖屬相的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)根據(jù)年份計(jì)算生肖屬相的方法,涉及C#數(shù)組與字符串的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C# 使用Free Spire.Presentation 實(shí)現(xiàn)對(duì)PPT插入、編輯、刪除表格

    C# 使用Free Spire.Presentation 實(shí)現(xiàn)對(duì)PPT插入、編輯、刪除表格

    小編發(fā)現(xiàn)使用.NET組件——Free Spire.Presentation,在C#中添加該產(chǎn)品DLL文件,可以簡(jiǎn)單快速地實(shí)現(xiàn)對(duì)演示文稿的表格插入、編輯和刪除等操作,具體實(shí)現(xiàn)代碼大家參考下本文吧
    2017-09-09
  • C#異步編程Task的創(chuàng)建方式

    C#異步編程Task的創(chuàng)建方式

    這篇文章介紹了C#異步編程Task的創(chuàng)建方式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#操作IIS程序池及站點(diǎn)的創(chuàng)建配置實(shí)現(xiàn)代碼

    C#操作IIS程序池及站點(diǎn)的創(chuàng)建配置實(shí)現(xiàn)代碼

    最近在做一個(gè)WEB程序的安裝包;對(duì)一些操作IIS進(jìn)行一個(gè)簡(jiǎn)單的總結(jié);主要包括對(duì)IIS進(jìn)行站點(diǎn)的新建以及新建站點(diǎn)的NET版本的選擇,還有針對(duì)IIS7程序池的托管模式以及版本的操作
    2013-03-03

最新評(píng)論