如何使用 lxml 创建一个命名间隔元素?

问题描述 投票:0回答:1

我正在使用 lxml 生成一个 RSS feed,并最终作为播客使用。这意味着我需要添加命名间隔的元素,如 <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: 标签名中的前缀?

python lxml xml-namespaces podcast
1个回答
1
投票

尝试使用 etree.QName()...

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")
© www.soinside.com 2019 - 2024. All rights reserved.