我正在解析一个不符合标准的XML文件(Sphinx的xmlpipe2格式),希望LXML解析器忽略存在未解析的命名空间前缀。
以下是Sphinx XML示例:
但上述做法并没有忽略前缀,而是将其删除了。
我可以创建一个目标,将已删除的前缀添加回去,比如:
以下是Sphinx XML示例:
<sphinx:schema>
<sphinx:field name="subject"/>
<sphinx:field name="content"/>
<sphinx:attr name="published" type="timestamp"/>
<sphinx:attr name="author_id" type="int" bits="16" default="1"/>
</sphinx:schema>
我知道可以通过传递解析器关键字选项来尝试恢复损坏的XML,例如:
parser = etree.XMLParser(recover=True)
tree = etree.parse('sphinxTest.xml', parser)
但上述做法并没有忽略前缀,而是将其删除了。
我可以创建一个目标,将已删除的前缀添加回去,比如:
parser = etree.XMLParser(target = AddPrefix())
AddPrefix()
是一个类,它会在每个属性标签前面添加前缀。有没有更简单的方法来完成这个操作?最终,我希望能以编程方式干净地写出 Sphinx 的 xmlpipe2 格式。