繁体   English   中英

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

[英]Python lxml: Ignore XML declaration (errors)

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

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

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

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

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

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

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

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

我对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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM