当前位置: 首页 > 编程笔记 >

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

刘玉石
2023-03-14
本文向大家介绍C# XML字符串包含特殊字符的处理转换方法小结,包括了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文件,就不会再有问题了。

 类似资料:
  • 我正在使用Apache POI读取<代码>。docx文件,并在一些操作后写入。<代码>。我使用的docx文件是法语的,但当我在它将一些法语字符转换为特殊字符。示例转换为 下面的代码用于编写文件 默认使用UTF-8。 在调试时,我在写入<代码>之前进行了检查。csv数据保持原样。但它在写作时被转换了吗?我已将默认语言环境设置为语言环境。法语 我错过了什么吗?

  • 我有一个字符串返回给我,其中包含转义字符。 这是一个示例字符串 " test\40gmail.com " 如您所见,它包含转义字符。我需要将其转换为其实际值,即 " test@gmail.com " 我该怎么做?

  • 我试图使用从数据库中获取值,但由于值包含特殊字符,因此出现异常。我无法找出原因。 下面是我正在尝试的代码: POJO如下所示:Hotel.java HotelMapping.java 查询字符串 查询=会话。createQuery(“来自HotelMapping hm,其中hm.hotelID.hotelName='“hotelName”'” 给出以下异常: 我试着避开撇号,但没有成功。我甚至尝试

  • 问题内容: 我正在尝试使用该SQL从XML Server Expression的SQL Server 2008表中获取名字和姓氏。数据包含特殊字符。当我尝试sql时,出现以下错误: FOR XML无法序列化节点“ LastName”的数据,因为它包含XML不允许的字符(0x001B)。要使用FOR XML检索此数据,请将其转换为二进制,varbinary或图像数据类型,并使用BINARY BASE

  • 问题内容: 我正在使用urllib从网站获取html字符串,并且需要将html文档中的每个单词放入列表中。 这是我到目前为止的代码。我不断收到错误消息。我还复制了以下错误。 这是错误。 问题答案: str.replace是您要执行的操作错误的函数(除了使用不正确之外)。您想用空格代替集合的任何字符,而不是用单个空格代替整个集合(后者是replace的作用)。您可以使用以下翻译: 这将创建一个映射,

  • 我试图使用xslt将xml中的特殊字符转换为其编码形式。 例子: 等等下面给出了我使用的代码 XML结构是 输出也应该包含xml节点,这就是为什么我在文本区域中使用xsl:拷贝而不是xsl: value-of。因为xsl: value-of Select="name"将只输出这是一个文件 我正在使用XSLT版本1。o 我想要的输出是

  • 问题内容: 我正在尝试使此正则表达式行起作用,但它们似乎不起作用(我无法将其打印出“匹配项”。 我的目标是从Scanner中读取一个字符串,然后运行此功能。如果字符串具有小写值或特殊字符,则我想调用无效函数,然后返回NULL。然后在isValid()方法中,让它返回false并结束。 如果它仅包含NUMBERS和UPPERCASE字符,我想按原样返回该字符串,以便它可以执行其他操作。 我似乎无法将

  • 我有一长串字符串的数据,我想将它们转换为整数,但仍保留一些包含特殊字符的字符串:,