繁体   English   中英

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

[英]Java XMLReader getting SAXParseException on special characters in XML

我在解析包含特殊字符(例如元素的属性中的“,<,>或&”之类的XML文件时遇到问题。此刻,我将XMLReader与自己的ContentHandler结合使用。不愿意更改XML是不可行的,因为我得到了很多一堆文件。我能做什么?

最好!

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

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

一键更改。

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

不是最佳实践 ,但是在使用XMLReader打开它之前,可以使用regex将几乎XML转换为正确的XML。 遵循以下原则(仅使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM