You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从含HTML的字符串加载XML遇转义字符错误求助

解决XML加载时的"unexpected token"错误(含HTML的JSON拼接问题)

哦,这个坑我踩过!你遇到的问题本质是XML对特殊字符的严格要求——你的JSON里嵌套了HTML字符串,里面肯定藏着XML解析器不认的字符(比如<、>、&,或者你报错里的反斜杠\),直接手动拼接XML字符串的话,这些字符会被当成非法的XML语法,导致LoadXml报错。

给你两个靠谱的解决方案,按优先级来:

1. 用XmlDocument API构建XML(最推荐,零手动拼接)

别再自己拼字符串了,直接用XML的原生API创建节点,它会自动帮你处理所有特殊字符转义,彻底避免这类问题:

// 初始化XmlDocument
XmlDocument xmlDOC = new XmlDocument();

// 创建根节点
XmlElement rootNode = xmlDOC.CreateElement("root");
xmlDOC.AppendChild(rootNode);

// 创建messageBody节点,用InnerText赋值自动转义
XmlElement messageBodyNode = xmlDOC.CreateElement("messageBody");
// 重点:InnerText会自动把所有XML敏感字符转义成实体(比如<转成&lt;)
messageBodyNode.InnerText = JsonString;
rootNode.AppendChild(messageBodyNode);

// 如果需要输出XML字符串,直接取OuterXml
string finalXml = xmlDOC.OuterXml;

这种方式完全不用你操心转义的事,API会搞定一切,是最稳妥的做法。

2. 手动拼接前先转义JSON字符串(迫不得已时用)

如果因为某些原因必须手动拼接XML,那一定要先把JSON字符串里的XML特殊字符转义掉,别自己手动替换(容易漏),用.NET自带的工具类:

// 用SecurityElement.Escape专门处理XML特殊字符转义
string escapedJson = System.Security.SecurityElement.Escape(JsonString);

// 再拼接XML字符串
StringBuilder sbXML = new StringBuilder();
sbXML.Append("<root>");
sbXML.AppendFormat("<messageBody>{0}</messageBody>", escapedJson);
sbXML.Append("</root>");

// 现在加载就不会报错了
XmlDocument xmlDOC = new XmlDocument();
xmlDOC.LoadXml(sbXML.ToString());

SecurityElement.Escape会处理所有XML规定的特殊字符:&→&amp;、<→&lt;、>→&gt;、"→&quot;、'→&apos;,确保你的JSON(包括里面的HTML)能安全嵌入XML。

额外提醒

  • 永远优先用XML API构建文档,手动拼接字符串是XML错误的重灾区,尤其是嵌套了其他格式(JSON、HTML)的时候。
  • 你报错里的反斜杠\,大概率是JSON里的转义字符(比如JSON里的\"表示双引号),直接拼进XML会被解析器当成非法字符,转义后就会被正确处理。

内容的提问来源于stack exchange,提问作者Ebikeneser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:05:27