猿问

Python XML: 'TypeError: SubElement() argument 1

我有一个来自xml另一部分的子元素列表,我试图插入,如下所示:


import xml.etree.ElementTree as et

import xml


defs_element = xml.etree.ElementTree.Element('ns0:defs')

for pc_def in pc_defs_list:

    et.SubElement(defs_element, 'path', pc_def.attrib)

但是当我尝试时,我得到这个错误:


TypeError: SubElement() argument 1 must be xml.etree.ElementTree.Element, not Element

其他方法会产生类似的错误。如何获取此非元素的元素?must be an Element, not Element


LEATH
浏览 160回答 2
2回答

Qyouu

有两个可能的问题:如果删除命名空间前缀,问题是否会消失?在 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 ETfrom xml.etree.ElementTree import Elementroot = Element('root')hi = ET.Element('hi')root.append(hi)抱怨它们是不兼容的对象

子衿沉夜

像这样的东西的工作原理:defs_xml_str = '<defs>'for path_str in path_strs_list:&nbsp; &nbsp; defs_xml_str += path_strdefs_xml_str += '</defs>'legend_1_xml.insert(0, et.fromstring(defs_xml_str))
随时随地看视频慕课网APP

相关分类

Python
我要回答