使用 etree 从 Python3 中的 XML 中删除无效字符

Removing invalid characters from XML in Python3 with etree

我有一个以 UTF-8 编码的 XML 文件,其中包含一些错误内容,当我尝试使用以下方法解析它时,这些内容破坏了我的脚本:

from xml.etree import ElementTree as etree  
etree.parse(file).getroot()

我看到一些旧的答案,他们在解析器中使用 "recover=True" 但在阅读 etree 的文档后,它似乎不再被允许。 此外,我无法手动替换字符,因为我担心将来其他字符可能会再次发生这种情况,因此我正在寻找一种可以完全删除任何单个不允许使用的字符的解决方案。 是否有任何内置功能或方法可以做到这一点?

正如评论中所建议的那样,我刚刚替换了 lxml 的库,并为解析器使用了 "recover" 选项。现在一切正常。

在类似的用例中我遇到了这个问题

exception = SAXParseException('reference to invalid character number')

那是因为我的 xml 有这个字符



这是我解决问题的代码

from lxml import etree
my_parser = etree.XMLParser(recover=True)
xml = etree.fromstring(dirty_xml_string, parser=my_parser)
cleaned_xml_string = etree.tostring(xml)

它适用于我的用例