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
应该作为声明中的第一个 "attribute" 出现。如果我尝试解析文件,lxml
会引发 XMLSyntaxError
。
不,我不能简单地更正声明,因为 Thunar 一直在用伪造的声明覆盖它。
这很可能是 Thunar 中的一个错误。
尽管如此,我想知道如何使用 lxml
忽略 XML 声明。
我知道我可以预处理 XML 文档以过滤掉 XML 声明。但这似乎不是很优雅。由于 XML 似乎默认为 1.0 版和 UTF-8 编码,因此肯定有可能忽略声明并假设在 lxml
中。我在文档或 google 上没有找到任何内容,我可能忽略了一些东西。
我对 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)
我正在尝试使用 lxml
Python 模块解析文件浏览器 Thunar 的自定义操作文件 (~/.config/Thunar/uca.xml
)。
出于某种原因,Thunar 显然将 malformed declaration
写入这些文件:
<?xml encoding="UTF-8" version="1.0"?>
显然,version
应该作为声明中的第一个 "attribute" 出现。如果我尝试解析文件,lxml
会引发 XMLSyntaxError
。
不,我不能简单地更正声明,因为 Thunar 一直在用伪造的声明覆盖它。
这很可能是 Thunar 中的一个错误。
尽管如此,我想知道如何使用 lxml
忽略 XML 声明。
我知道我可以预处理 XML 文档以过滤掉 XML 声明。但这似乎不是很优雅。由于 XML 似乎默认为 1.0 版和 UTF-8 编码,因此肯定有可能忽略声明并假设在 lxml
中。我在文档或 google 上没有找到任何内容,我可能忽略了一些东西。
我对 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)