使用XmlWriter和XmlReader可避免XML特殊字符解析错误,需转义、&、"、'五个字符,WriteString自动转义,CDATA适合含大量特殊字符的文本。

在C#开发中处理XML时,特殊字符是导致解析中断的常见原因。像 、>、&、" 和 ' 这些字符在XML中有特定含义,若未正确转义,会直接引发 XmlException。要彻底避免这类问题,关键在于理解何时需要转义以及使用正确的处理方式。
明确哪些字符需要转义
XML规定以下5个字符必须转义:
替换为-
>替换为> -
&替换为& -
"替换为" -
'替换为'
手动替换不仅容易遗漏,还可能破坏原有内容结构。应优先使用系统提供的API自动处理。
使用XmlWriter安全写入内容
XmlWriter 是最推荐的方式,它会自动处理所有特殊字符转义,无需手动干预。
using (var writer = XmlWriter.Create("data.xml"))
{
writer.WriteStartElement("Message");
writer.WriteString("用户输入包含 <script> 标签和 & 符号");
writer.WriteEndElement();
}
</script>
上面代码中,WriteString 方法会自动将 和 & 转义,生成合法XML。这是最安全、最简洁的解决方案。
读取时用XmlReader避免注入风险
读取XML时也应使用 XmlReader,它能正确解析转义字符,还原原始内容。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
using (var reader = XmlReader.Create("data.xml"))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Text)
{
string text = reader.Value; // 自动解码转义字符
Console.WriteLine(text);
}
}
}
这种方式确保即使内容包含特殊符号,也能完整读取而不中断解析。
处理CDATA段避免转义
如果文本中包含大量特殊字符(如HTML或代码片段),可使用 CDATA 段落,内容不会被解析。
writer.WriteStartElement("Code");
writer.WriteCData("function test() { if (a d) ... }");
writer.WriteEndElement();
生成的XML如下:
d) ... }]]>
CDATA内所有字符原样保留,适合存储脚本或配置代码。
基本上就这些。只要坚持使用 XmlWriter 和 XmlReader,避免拼接字符串生成XML,就能从根本上杜绝特殊字符引发的解析错误。不复杂但容易忽略。










