如何使用lxml创建名称空间元素?

2024-06-12 11:48:06 发布

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

我使用lxml生成一个RSS提要,最终用作播客。这意味着我需要添加像<itunes:duration><itunes:subtitle>这样的命名空间元素。但是我在试图弄清楚如何用lxml动态创建这样的元素时遇到了很多麻烦

如果我只是尝试:

from lxml import etree

element = etree.Element("itunes:duration")

我明白了:

ValueError: Invalid tag name 'itunes:duration'

接下来,我尝试了这个,然后靠近了一点:

from lxml import etree

etree.register_namespace("itunes", "http://www.itunes.com/dtds/podcast-1.0.dtd")
element = etree.Element("{itunes}duration")
print(etree.tostring(element).decode("utf-8"))

然而,这导致了这一结果:

<ns0:duration xmlns:ns0="itunes"/>

因此,尽管这比例外要好,但它显然仍然不正确。如何在标记名中创建带有itunes:前缀的元素


Tags: fromimport元素空间elementlxml命名itunes
1条回答
网友
1楼 · 发布于 2024-06-12 11:48:06

尝试使用^{}

from lxml import etree

etree.register_namespace("itunes", "http://www.itunes.com/dtds/podcast-1.0.dtd")
element = etree.Element(etree.QName("http://www.itunes.com/dtds/podcast-1.0.dtd", "duration"))
print(etree.tostring(element).decode("utf-8"))

印刷品

<itunes:duration xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"/>

你也可以用克拉克符号

element = etree.Element("{http://www.itunes.com/dtds/podcast-1.0.dtd}duration")

相关问题 更多 >