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

 更新时间:2020年07月01日 12:39:51   作者:webkaka  
今天用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("&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文件,就不会再有问题了。

相关文章

  • Entity Framework模型优先与实体对象查询

    Entity Framework模型优先与实体对象查询

    这篇文章介绍了Entity Framework模型优先与实体对象查询,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C#实现输入10个数存入到数组中并求max和min及平均数的方法示例

    C#实现输入10个数存入到数组中并求max和min及平均数的方法示例

    这篇文章主要介绍了C#实现输入10个数存入到数组中并求max和min及平均数的方法,涉及C#简单数据转换与数值运算相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • C# 整数转二进制字符串方式

    C# 整数转二进制字符串方式

    这篇文章主要介绍了C# 整数转二进制字符串方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C#中泛型举例List<T>与DataTable相互转换

    C#中泛型举例List<T>与DataTable相互转换

    这篇文章介绍了C#中泛型举例List<T>与DataTable相互转换的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#中如何正确的使用字符串String

    C#中如何正确的使用字符串String

    这篇文章主要给大家介绍了关于在C#中如何正确的使用字符串String的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • C#零基础开发中最重要的概念总结

    C#零基础开发中最重要的概念总结

    这篇文章主要为大家详细介绍了C#零基础开发中最重要的一些概念,文中的示例代码讲解详细,对我们学习C#有一定的帮助,需要的可以参考一下
    2023-02-02
  • C#实现对文件进行加密解密的方法

    C#实现对文件进行加密解密的方法

    这篇文章主要介绍了C#实现对文件进行加密解密的方法,涉及C#加密与解密的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C#使用ADO.Net连接数据库与DbProviderFactory实现多数据库访问

    C#使用ADO.Net连接数据库与DbProviderFactory实现多数据库访问

    这篇文章介绍了C#使用ADO.Net连接数据库与DbProviderFactory实现多数据库访问的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • c#并行任务多种优化方案分享(异步委托)

    c#并行任务多种优化方案分享(异步委托)

    c#并行任务多种优化方案分享,使用异步委托+回调函数方式实现,大家参考使用吧
    2013-12-12
  • C#使用Socket发送和接收TCP数据实例

    C#使用Socket发送和接收TCP数据实例

    这篇文章主要介绍了C#使用Socket发送和接收TCP数据的实现方法,以实例的形式详细讲述了C#实现socket通信的完整实现过程,非常具有实用价值,需要的朋友可以参考下
    2014-10-10

最新评论