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

Hope ·
更新时间:2024-09-20
· 859 次阅读

为了能正常输出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 ? " " : "\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视为特殊字符的字符并不多,只有三个:<、&、>,因此只需把这三个字符进行转换即可,而对单双引号和换行符可转换也可不转换。

使用方法:

1、首先要导入命名空间System.Text;,因为要用到StringBuilder方法。

2、判断及转换字符串时直接使用函数XmlString(),如:

string sText = XmlString(sText);

如果要输出单双引号和换行符,那么要对这几个字符进行转义,则要这样使用函数:

string sText = XmlString(sText, true);

总结

通过上述方法的使用,在网页上输出XML格式字符串或者生成一个可用的XML文件,就不会再有问题了。

您可能感兴趣的文章:C# 调用WebService的方法C# 图片格式转换的实例代码C# 线程同步的方法c# 实现图片查看器C#使用InstallerProjects打包桌面应用程序的完整步骤Unity C#打包AssetBundle与场景详解C#判断字符串中是否包含指定字符串及contains与indexof方法效率问题C# 使用SharpZipLib生成压缩包的实例代码C#利用SharpPcap实现网络包捕获嗅探C#中TCP粘包问题的解决方法C# 实现抓包的实例代码



XML 小结 C# c# xml 方法 特殊字符

需要 登录 后方可回复, 如果你还没有账号请 注册新账号