我正在使用Python处理从其他系统收到的XML文件。该系统产生无效的XML。主要是,它不会转义XML中的某些&。因此,例如,我有这样几行:
<IceCream>Ben&Jerry</IceCream>
当然,当使用SAX或DOM进行解析时,它将引发无效的令牌错误。对于更一般的背景-这是一个非常大的文件(2MB),相当平坦,并且在CDATA中包含很多数据。
我尝试过的:
&(?!\w{2,4};)
。它修复了它,但是它逃脱了CDATA中的“&”号,然后在目标系统中引起了错误。之后,我无法取消转义CDATA中的所有内容,因为其中一些需要保持转义。&Jerry;
),而不是逃避散乱的“&”号。不好。下一步将是使用状态机编写我自己的解析器。救我脱离那条路。它不是一个复杂的结构(非常平坦,最多4层深度),因此正则表达式也许能够捕获不在CDATA中的区域。
非常感谢。
[tidylib使用Python绑定:
>>> import tidylib
>>> print tidylib.tidy_document("<IceCream>Ben&Jerry</IceCream>", {"input_xml": True})[0]
<IceCream>Ben&Jerry</IceCream>
请参见整洁的官方文档以获取parser options的列表。
“无意中拖曳堆栈溢出...可能会导致脆弱的代码,并可能导致危险。”https://www.tjohearn.com/2018/01/24/safe-ampersand-parsing-in-xml-files/