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
相关产品推荐
相关产品推荐

