我正在尝试使用~/.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
中。我没有在文档或谷歌上找到任何东西,我可能忽略了一些东西。
答案 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)