2 回答

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

TA貢獻1828條經驗 獲得超3個贊
像這樣的東西的工作原理:
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))
添加回答
舉報