Python lxml:忽略XML声明(错误)

时间:2017-06-04 10:17:58

标签: python xml lxml thunar

我正在尝试使用~/.config/Thunar/uca.xml Python模块解析文件浏览器Thunar的自定义操作文件(lxml)。

出于某种原因,Thunar显然在这些文件中写了malformed declaration

<?xml encoding="UTF-8" version="1.0"?>

显然,version应该是第一个&#34;属性&#34;在声明中。如果我尝试解析文件,lxml会引发XMLSyntaxError

不,我不能简单地纠正这个声明,因为Thunar会一直用伪造的东西覆盖它。

这很可能是Thunar的一个错误。

然而,我想知道如何忽略lxml的XML声明。

我知道我可以预处理XML文档来过滤掉XML声明。但这看起来并不优雅。由于XML似乎默认为1.0版和UTF-8编码,因此肯定有可能忽略声明并假设在lxml中。我没有在文档或谷歌上找到任何东西,我可能忽略了一些东西。

1 个答案:

答案 0 :(得分:2)

我对Thunar知之甚少,但如果它在问题中产生XML声明,那么这就是一个bug。使用不正确的XML声明会使文档格式不正确。

XML语法为XML声明中的项指定了一个正确的顺序。 version必须先到,encoding秒。见http://w3.org/TR/xml/#NT-XMLDecl

但是,使用lxml,您可以使用recover选项设置为True的解析器实例进行解析。它适用于这种情况。错误的XML声明被忽略。

from lxml import etree 

parser = etree.XMLParser(recover=True)
tree = etree.parse('uca.xml', parser)

请参阅http://lxml.de/api/lxml.etree.XMLParser-class.html