C# XML字符串包含特殊字符的处理转换方法小结
作者:webkaka 发布时间:2022-08-17 07:21:24
为了能正常输出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文件,就不会再有问题了。
来源:http://www.webkaka.com/tutorial/asp.net/2020/040929/


猜你喜欢
- 以下是tcp socket客户端和服务端源码,代码简单大家参考使用吧Tcp Server#include <WinSock2.h>
- 一、概述热修复这项技术,基本上已经成为项目比较重要的模块了。主要因为项目在上线之后,都难免会有各种问题,而依靠发版去修复问题,成本太高了。现
- 本文实例为大家分享了QT实现用户登录注册的具体代码,供大家参考,具体内容如下#include "widget.h"#in
- 目录引言SqlSessionFactory不使用 XML 构建 SqlSessionFactorySqlSessionFactoryBuil
- ActiveMQ是什么ActiveMQ是消息队列技术,为解决高并发问题而生ActiveMQ生产者消费者模型(生产者和消费者可以跨平台、跨系统
- 本文汇总了常用的DateTime日期类型格式化显示方法,方便读者在使用的时候参考借鉴一下。具体如下所示:1.绑定时格式化日期方法:<A
- 在Java的6.0版本中新增了concurrent包,这个包是用作线程同步的包,提供了很多工具类。其中定时器就是其中之一。近期在做一个项目,
- 由于我们在eclipse ee中把项目部署在web端经常会出现报404错误。原因为:404状态码是一种http状态码,其意思是: 所请求的页
- Android11 读写权限申请Android11系统对应用写入权限做了严格的限制。本文介绍如何获取文件读写权限。项目中 build.gra
- 这篇文章主要介绍了springboot配置文件的加载顺序解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 在开发Android应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样
- 前言重试,我相信大家并不陌生。在我们调用Http接口的时候,总会因为某种原因调用失败,这个时候我们可以通过重试的方式,来重新请求接口。生活中
- java并发之ArrayBlockingQueue详细介绍 ArrayBlockingQueue是常用的线程集合,在线程池中也常常
- 在C#中,可以使用一些第三方库或内置类库实现动态执行脚本的功能。以下是几个常用的方案:1.使用Roslyn编译器Roslyn是微软推出的一个
- 泛型1、简单泛型泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。泛型暂时不指定类型,在使用时决定具体
- 一.理论准备流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行,设备可以是文件、网络、
- 本文实例讲述了C#实现过滤sql特殊字符的方法集合。分享给大家供大家参考,具体如下:1./// <summary>/// 过滤不
- 一、利用距离感应器监听听筒靠近耳朵事件准确的说距离感应器并不能监听到你是否把手机靠近耳朵,也许是你用手挡在了距离感应器前面,但这不是我们关心
- 冒泡排序原理①比较相邻的元素,如果前一个元素比后一个元素大,则交换这两个元素的位置②对每一对相邻的元素循环上面的步骤,最终最后面的元素就是最
- Java基本类型与byte数组之间相互转换,刚刚写的package cn.teaey.utils;import java.nio.chars