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))
添加回答
举报