我有一堆使用前缀但没有相应命名空间声明的 XML 文件。
像这样的东西:
<tal:block tal:condition="foo">
...
</tal:block>
或者:
<div i18n:domain="my-app">
...
我知道这些前缀来自哪里,我尝试了以下方法,但没有成功:
from lxml import etree as ElementTree
ElementTree.register_namespace("i18n", "http://namespaces.zope.org")
ElementTree.register_namespace("tal", "http://xml.zope.org/namespaces/tal")
with open(path) as fp:
tree = ElementTree.parse(fp)
但 lxml 仍然窒息:
lxml.etree.XMLSyntaxError: Namespace prefix i18n for domain on div is not defined, line 4, column 20
我知道我可以使用ElementTree.XMLParser(recover=True)
,但无论如何我都想保留前缀,而这种方法不会。
任何的想法?