2 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
有兩個(gè)可能的問題:
如果刪除命名空間前綴,問題是否會(huì)消失?在 ElementTree 中創(chuàng)建命名空間元素并不像只用前綴作為前綴那么簡(jiǎn)單。請(qǐng)參閱在 Python 中使用 ElementTree 發(fā)出命名空間規(guī)范中的主要答案,以顯示命名空間的工作原理:ns0:
et.register_namespace('ns0',"http://ns0.namespaces.org")
defs_element = xml.etree.ElementTree.Element('{http://ns0.namespaces.org}:defs')
你沒有解釋從哪里來(lái)。它是否可能加載到另一個(gè)文件中?ElementTree在其C版本中對(duì)正在傳入的確切類非常挑剔。因此,如果元素來(lái)自加載Python版本的ElementTree的文件,則無(wú)法將它們插入到ElementTree中。即使它們都加載了 ElementTree 的 C 版本(Python 3.3 之前的 cElementTree),如果它們不是從同一個(gè)二進(jìn)制文件加載的(例如,一個(gè)在虛擬環(huán)境內(nèi)部,一個(gè)在外部),那么會(huì)出現(xiàn)此消息(以前是更隱晦的消息)。這里的情況似乎不太可能,因?yàn)槟趧?chuàng)建新的子元素,而不是直接追加現(xiàn)有元素。pc_defs_listargument 1 must be Element, not Element
曾經(jīng)在Django環(huán)境中,我甚至遇到了以下問題:
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element
root = Element('root')
hi = ET.Element('hi')
root.append(hi)
抱怨它們是不兼容的對(duì)象

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
像這樣的東西的工作原理:
defs_xml_str = '<defs>'
for path_str in path_strs_list:
defs_xml_str += path_str
defs_xml_str += '</defs>'
legend_1_xml.insert(0, et.fromstring(defs_xml_str))
添加回答
舉報(bào)