XML节点包含&符号导致解析报错,如何仅转义内容特殊字符不修改标签?
问题本质
你拿到的XML文本在节点内容区域包含未转义的实体字符&,不符合XML语法规范,直接解析会报错。常规全量转义方法会破坏XML标签本身的<、>符号,因此需要定向处理内容区域的非法字符。
方案1:正则定向替换未转义&
通过正则匹配仅替换没有构成合法XML实体的&字符,不会影响XML标签本身的符号:
using System.Text.RegularExpressions; // 你的非法XML字符串 string rawXml = @"<Data> <Name>Test & < test> </Name> </Data>"; // 正则匹配未构成合法XML实体的&,替换为转义后的& string processedXml = Regex.Replace(rawXml, @"&(?!(?:#[0-9]+|#[xX][0-9a-fA-F]+|[a-zA-Z0-9]+);)", "&"); // 此时processedXml可直接传入XML解析器加载
适用场景:确认只有&未转义,无其他非法XML字符的场景,执行效率更高。
方案2:容错解析器自动修复(更推荐)
使用对非规范XML容错性高的解析库(如.NET生态的HtmlAgilityPack),自动识别并修复内容区域的所有非法转义字符,无需手动编写规则:
using HtmlAgilityPack; string rawXml = @"<Data> <Name>Test & < test> </Name> </Data>"; HtmlDocument doc = new HtmlDocument(); // 加载非规范XML时自动修复非法字符 doc.LoadXml(rawXml); // 导出修复后的合法XML字符串 string validXml = doc.DocumentNode.OuterHtml;
优势:无需提前判断非法字符类型,除了&之外,内容中未转义的<、>、引号等也会自动处理,避免后续再次出现解析错误。
内容的提问来源于stack exchange,提问作者Muhammad Faisal
相关产品推荐
相关产品推荐

