加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用lxml解析包含前缀但没有名称空间声明的XML?

发布时间:2020-12-16 22:44:14 所属栏目:百科 来源:网络整理
导读:我有一堆 XML文件使用前缀但没有相应的命名空间声明. 像: tal:block tal:condition="foo".../tal:block 要么: div i18n:domain="my-app"... 我知道那些前缀来自哪里,我尝试了以下内容,但没有成功: from lxml import etree as ElementTreeElementTree.regi
我有一堆 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),但我想保留前缀,这种方法没有.

任何的想法?

解决方法

它不是有效的XML,使用未定义的前缀,因此没有XML解析器能够处理它.

您最好的选择(除了修复XML)是以编程方式修改XML源以将命名空间属性添加到根元素(只使用您的语言中的字符串支持).在将XML提供给解析器之前,将xmlns:tal =“http://xml.zope.org/namespaces/tal”等添加到根元素.然后,XML解析器应该无需投诉地处理它,也没有任何注册命名空间.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读