LXML中有忽略未定义命名空间前缀的开关吗?

8
我正在解析一个不符合标准的XML文件(Sphinx的xmlpipe2格式),希望LXML解析器忽略存在未解析的命名空间前缀。
以下是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 格式。

1个回答

3

xmlns:sphinx="bogus"添加到根元素中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接