我在解析XML文件时遇到问题,该文件包含元素属性中的“,<,>或&”等特殊字符。目前我使用XMLReader和自己的ContentHandler。不幸的是,更改XML不是选项,因为我得到了大量的文件。知道我能做什么??
最佳!
答案 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&$2')
xml = xml.replace(/("[^"]*)<([^"]*")/, '$1<$2')
xml = xml.replace(/("[^"]*)>([^"]*")/, '$1>$2')
xml = xml.replace(/("[^"]*)"([^"]*")/, '$1"$2')
alert(xml);