LXML中是否有忽略未定义命名空间前缀的选项?
我正在解析一个不符合标准的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"
。