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

C#中使用XmlTextReader时如何转义XML字符串中的$符号?

解决XML标签含$符号导致XmlTextReader读取失败的问题

你的XML内容<hello$1>hello</hello$1>本身不符合XML规范——XML标签名称里不允许出现$字符,所以直接用XmlTextReader读取会抛出这个异常:

{"The '$' character, hexadecimal value 0x24, cannot be included in a name. Line 1, position 12."}

既然源内容没法修改,唯一可行的办法是在读取前对XML字符串做预处理,把标签里的$替换成XML允许的合法字符(比如下划线_),读完之后如果需要再还原回去即可。具体步骤和代码示例如下:

  • 第一步:预处理XML字符串,注意要精准替换标签内的$,避免误改文本内容里的$。用正则表达式匹配标签部分是比较靠谱的方式:
    string originalXml = "<hello$1>hello</hello$1>";
    // 匹配标签中的$,替换为下划线,兼容开始标签和闭合标签
    string processedXml = Regex.Replace(originalXml, @"<(/?)(\w+)\$(\w+)>", "<$1$2_$3>");
    
  • 第二步:用XmlTextReader读取处理后的processedXml,此时标签名称符合XML规范,不会再抛出异常。
  • 第三步(可选):如果后续业务需要还原原始标签名,读取完XML内容后,再把标签里的_替换回$即可。

另外也可以自定义XmlReader继承XmlTextReader,重写Name属性等方法来动态替换$,但这种方式实现复杂,不如预处理字符串直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:05:48