Java XMLReader在XML中的特殊字符上获取SAXParseException

时间:2012-06-11 20:20:20

标签: java xml sax

我在解析XML文件时遇到问题,该文件包含元素属性中的“,<,>或&”等特殊字符。目前我使用XMLReader和自己的ContentHandler。不幸的是,更改XML不是选项,因为我得到了大量的文件。知道我能做什么??

最佳!

3 个答案:

答案 0 :(得分:3)

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

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

做一次性改变。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

它是not best practice,但您可以使用正则表达式将几乎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);