我正在使用 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:
标签名中的前缀?
尝试使用 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")