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

如何使用XmlDocument.LoadXml()加载包含&或<的字符串?是否需用Resolver?

解决XmlDocument.LoadXml()加载含特殊字符字符串的问题

首先得明确:你遇到的错误根本原因是原始字符串不符合XML语法规则——XML里的<、&、>、"、'属于特殊字符,不能直接出现在元素的文本内容里(标签本身的<除外),必须做转义处理,否则XmlDocument会判定这是无效XML,抛出解析异常。

下面给你两种可行的解决办法,以及关于Resolver的说明:

方法1:转义特殊字符

把字符串里的特殊字符替换成XML实体引用,这是最标准的做法:

  • & → &amp;
  • < → &lt;
  • > → &gt;
  • " → &quot;
  • ' → &apos;

比如你的例子,修改后应该是:

<choice id="A1"> sample &lt; text</choice>

直接用这个转义后的字符串调用LoadXml()就能正常加载了。

如果你不想手动转义,可以用.NET自带的工具类自动处理,比如System.Security.SecurityElement.Escape()方法,专门用于XML内容的转义:

string originalText = "sample < text";
string escapedText = System.Security.SecurityElement.Escape(originalText);
string xmlString = $"<choice id=\"A1\">{escapedText}</choice>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);

方法2:使用CDATA段包裹特殊内容

如果你希望保留原始的特殊字符(比如后续读取时还能拿到<而不是&lt;),可以把包含特殊字符的内容放在<![CDATA[...]]>标签里——CDATA段里的内容会被XML解析器当作纯文本,不会解析其中的特殊字符。

修改后的示例:

<choice id="A1"><![CDATA[ sample < text]]></choice>

这样调用LoadXml()也不会报错,读取元素内容时能直接获取到原始的sample < text。

关于Resolver的疑问

完全不需要使用Resolver!XmlResolver的作用是处理XML外部资源(比如外部DTD文件、实体引用文件),和元素内容里的特殊字符处理没有任何关系,这里用不上它。

XmlDocument能否处理这类情况?

当然可以!只要你的字符串符合XML语法规则(转义特殊字符或用CDATA包裹),XmlDocument完全能正常加载和解析这类内容。问题出在原始字符串本身不符合XML规范,不是XmlDocument的能力问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:38