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

Nob*_*son 2 python xml lxml thunar

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

出于某种原因,Thunar 显然将 amalformed declaration写入这些文件:

<?xml encoding="UTF-8" version="1.0"?>
Run Code Online (Sandbox Code Playgroud)

显然,version预期将作为声明中的第一个“属性”出现。如果我尝试解析文件lxml,XMLSyntaxError则会引发一个。

不,我不能简单地更正声明,因为 Thunar 一直用虚假的声明覆盖它。

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

不过,我想知道如何忽略带有lxml.

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

mzj*_*zjn 6

我对 Thunar 知之甚少,但如果它在问题中生成 XML 声明,那么这是一个错误。不正确的 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)
Run Code Online (Sandbox Code Playgroud)

见http://lxml.de/api/lxml.etree.XMLParser-class.html