今天用C#输出XML文件时,发现报错,经过反复检查调试,发现是因为某处内容含有某些特殊字符,这些特殊字符是在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("<");
else if (chr == '>')
sb.Append(">");
else if (chr == '&')
sb.Append("&");
// special handling for quotes
else if (isAttribute && chr == '\"')
sb.Append(""");
else if (isAttribute && chr == '\'')
sb.Append("'");
// 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# XML字符串包含特殊字符的处理转换方法小结
基础教程推荐
- 一个读写csv文件的C#类 2022-11-06
- C# List实现行转列的通用方案 2022-11-02
- unity实现动态排行榜 2023-04-27
- C#类和结构详解 2023-05-30
- C#控制台实现飞行棋小游戏 2023-04-22
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C# 调用WebService的方法 2023-03-09
- ZooKeeper的安装及部署教程 2023-01-22
- C# windows语音识别与朗读实例 2023-04-27
- winform把Office转成PDF文件 2023-06-14