2

我在解析包含元素属性中的特殊字符(如“、<、> 或 &一堆文件。知道我能做什么吗?

最好的!

4

3 回答 3

3

它不是 XML。不要称它为 XML,因为你在误导自己。您正在处理专有的数据语法,并且错过了使用 XML 进行数据交换的所有好处。您不能使用任何现有的处理 XML 的出色工具,因为您的数据不是 XML。您正处于 XML 发明之前存在的数据交换的黑暗时代,每个人都必须编写自己的解析器并将它们移植到多个平台,而且成本很高。从这种混乱状态切换到开放标准的现代世界可能会很昂贵,但投资将很快得到回报。只是不要让任何利益相关者自欺欺人地认为,因为您的语法“几乎是 XML”,因此您几乎可以从中获益。XML 要么全有,要么全无。

于 2012-06-11T22:55:26.327 回答
3

您必须更改 XML 以使其格式正确。这五个魔术字符必须正确编码或包装在 CDATA 部分中,以告诉解析器允许它们通过。

如果五个魔术字符未正确编码,则您不会收到格式正确的 XML。这应该是您与用户签订合同的基础。

进行一次性更改。

于 2012-06-11T20:21:59.967 回答
0

不是最佳实践,但您可以使用正则表达式将几乎 XML 转换为正确的 XML,然后再使用 XMLReader 打开它。沿着这些思路(仅使用 javascript 进行快速概念验证):

var xml = '<root><node attr="bad attr chars...<"&>..."/></root>';
xml = xml.replace(/("[^"]*)&([^"]*")/, '$1&amp;$2')
xml = xml.replace(/("[^"]*)<([^"]*")/, '$1&lt;$2')
xml = xml.replace(/("[^"]*)>([^"]*")/, '$1&gt;$2')
xml = xml.replace(/("[^"]*)"([^"]*")/, '$1&quot;$2')
alert(xml);
于 2012-06-11T21:02:37.787 回答