< > 替换为 > & 替换为 & " 替换为 " ' 替换为 '手动">

解决C#中XML特殊字符转义问题 彻底告别解析中断

来源:这里教程网 时间:2026-02-21 17:36:29 作者:

在C#开发中处理XML时,特殊字符是导致解析中断的常见原因。像

、<code>>
&
"
'
这些字符在XML中有特定含义,若未正确转义,会直接引发
XmlException
。要彻底避免这类问题,关键在于理解何时需要转义以及使用正确的处理方式。

明确哪些字符需要转义

XML规定以下5个字符必须转义:

 替换为 <code><
>
替换为
>
&
替换为
&
"
替换为
"
'
替换为
'

手动替换不仅容易遗漏,还可能破坏原有内容结构。应优先使用系统提供的API自动处理。

使用XmlWriter安全写入内容

XmlWriter 是最推荐的方式,它会自动处理所有特殊字符转义,无需手动干预。

using (var writer = XmlWriter.Create("data.xml"))
{
    writer.WriteStartElement("Message");
    writer.WriteString("用户输入包含 <script> 标签和 & 符号");
    writer.WriteEndElement();
}

上面代码中,

WriteString
方法会自动将
 和 <code>&
转义,生成合法XML。这是最安全、最简洁的解决方案。

读取时用XmlReader避免注入风险

读取XML时也应使用 XmlReader,它能正确解析转义字符,还原原始内容。

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 < b && c > d) ... }");
writer.WriteEndElement();

生成的XML如下:

 d) ... }]]>

CDATA内所有字符原样保留,适合存储脚本或配置代码。

基本上就这些。只要坚持使用

XmlWriter
XmlReader
,避免拼接字符串生成XML,就能从根本上杜绝特殊字符引发的解析错误。不复杂但容易忽略。

相关推荐

热文推荐