LXML中是否有忽略未定义命名空间前缀的选项?

8 投票
1 回答
1562 浏览
提问于 2025-04-16 03:01

我正在解析一个不符合标准的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"

撰写回答