pythonlxml:忽略XML声明(错误)

2024-09-30 08:17:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

出于某些原因,Thunar显然会将malformed declaration写入以下文件:

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

显然,version应该作为声明中的第一个“属性”出现。lxml如果我试图解析文件,则引发一个XMLSyntaxError。在

不,我不能简单地更正声明,因为图纳尔一直用伪造的声明覆盖它。在

这很可能是图纳的一个虫子。在

不过,我想知道如何忽略带有lxml的XML声明。

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


Tags: 模块文件文档config声明version浏览器xml
1条回答
网友
1楼 · 发布于 2024-09-30 08:17:13

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

XML语法为XML声明中的项指定一个正确的顺序。version必须排在第一位,第二位是{}。见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

相关问题 更多 >

    热门问题