簡體   English   中英

如何使用 lxml 創建命名空間元素?

[英]How do I create a namespaced element with lxml?

我正在使用 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"))

然而,這導致了這個 output:

<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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM