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

使用XmlDocument.LoadXml加载XML报错0x3C为无效属性字符问询

错误原因

你遇到的报错本质是XML属性值中出现了未正确转义的<字符(对应十六进制0x3C),你之前的转义操作只覆盖了C#字符串字面量的转义层,没有满足XML规范的要求:
XML属性值内不允许直接出现<字符,要保留该字符的显示,需要让XML解析器读取到的属性内容中<被转义为&lt;、>被转义为&gt;。而你当前代码中xmlStr运行时的实际内容里,属性值部分为some text goes here <textInBrackets>,XML解析器读到<就会判定为非法字符。

可行解决思路
  • 方法1:手动调整转义层数
    如果你坚持手动拼接XML字符串,需要对<、>做双层转义,把原字符串中的&lt;替换为&amp;lt;、&gt;替换为&amp;gt;即可:

    String xmlStr = "<Tag attribute1=\"some text goes here &amp;lt;textInBrackets&amp;gt;\" attribute2=\"other text\"></Tag>";
    

    此时xmlStr运行时的属性内容为some text goes here &lt;textInBrackets&gt;,XML解析器可以正常识别,你后续读取属性值时会自动还原为<textInBrackets>。

  • 方法2:用.NET自带XML类自动处理转义(推荐)
    手动拼接XML极易出现转义错误,建议直接使用XmlDocument的原生API生成节点和属性,框架会自动处理所有转义逻辑,你直接写入原始内容即可:

    XmlDocument xd = new XmlDocument();
    // 创建根节点
    XmlElement tagNode = xd.CreateElement("Tag");
    // 添加属性1,直接写入带尖括号的原始内容即可
    tagNode.SetAttribute("attribute1", "some text goes here <textInBrackets>");
    // 添加属性2
    tagNode.SetAttribute("attribute2", "other text");
    xd.AppendChild(tagNode);
    

    后续读取tagNode.GetAttribute("attribute1")时,拿到的就是带尖括号的原始内容,完全满足保留括号的需求。

  • 方法3:对属性值做统一XML编码后拼接
    如果必须拼接XML字符串,可以调用.NET自带的编码方法处理属性值,避免手动转义出错:

    // 引用System.Web命名空间,或者用System.Security.SecurityElement.Escape方法
    string attrValue = System.Web.HttpUtility.HtmlEncode("some text goes here <textInBrackets>");
    string xmlStr = $"<Tag attribute1=\"{attrValue}\" attribute2=\"other text\"></Tag>";
    XmlDocument xd = new XmlDocument();
    xd.LoadXml(xmlStr);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:36:00