我在解析包含元素属性中的特殊字符(如“、<、> 或 &一堆文件。知道我能做什么吗?
最好的!
它不是 XML。不要称它为 XML,因为你在误导自己。您正在处理专有的数据语法,并且错过了使用 XML 进行数据交换的所有好处。您不能使用任何现有的处理 XML 的出色工具,因为您的数据不是 XML。您正处于 XML 发明之前存在的数据交换的黑暗时代,每个人都必须编写自己的解析器并将它们移植到多个平台,而且成本很高。从这种混乱状态切换到开放标准的现代世界可能会很昂贵,但投资将很快得到回报。只是不要让任何利益相关者自欺欺人地认为,因为您的语法“几乎是 XML”,因此您几乎可以从中获益。XML 要么全有,要么全无。
您必须更改 XML 以使其格式正确。这五个魔术字符必须正确编码或包装在 CDATA 部分中,以告诉解析器允许它们通过。
如果五个魔术字符未正确编码,则您不会收到格式正确的 XML。这应该是您与用户签订合同的基础。
进行一次性更改。
这不是最佳实践,但您可以使用正则表达式将几乎 XML 转换为正确的 XML,然后再使用 XMLReader 打开它。沿着这些思路(仅使用 javascript 进行快速概念验证):
var xml = '<root><node attr="bad attr chars...<"&>..."/></root>';
xml = xml.replace(/("[^"]*)&([^"]*")/, '$1&$2')
xml = xml.replace(/("[^"]*)<([^"]*")/, '$1<$2')
xml = xml.replace(/("[^"]*)>([^"]*")/, '$1>$2')
xml = xml.replace(/("[^"]*)"([^"]*")/, '$1"$2')
alert(xml);