C# XML字符串包含特殊字符的处理转换方法小结

为了能正常输出XML格式的内容,必须要对不被XML允许的那些特殊字符进行转换。本文介绍的正是如何使用C#判断XML字符串是否含特殊字符并进行转换。

以下是几个特殊字符的对应实体。

<

小于号

>

大于号

&

&

'

'

单引号

"

"

双引号

在C#中,直接调用C#提供的方法,保存之后就会自动将特殊字符转为对应实体:

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

或者

将内容放在<![CDATA[ ]]>中,例如<![CDATA[2]]> ,CDATA里面的内容在XmlDocument 解析时会自动忽略掉

如果是很多有区域都有特殊内容,可以参考下面的代码通过函数来实现替换。

其实挺简单,只需用下面的这个函数,即可判断及转换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文件,就不会再有问题了。

以上是 C# XML字符串包含特殊字符的处理转换方法小结 的全部内容, 来源链接: utcz.com/z/353714.html

回到顶部