繁体   English   中英

Python XML:'TypeError:SubElement() 参数 1 必须是 xml.etree.ElementTree.Element,而不是 Element'

[英]Python XML: 'TypeError: SubElement() argument 1 must be xml.etree.ElementTree.Element, not Element'

我有一个来自 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错误。 我如何获得这个不是元素的元素?

像这样的工作:

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

有两个可能的问题:

  1. 如果删除命名空间ns0:前缀,问题会消失吗? 在 ElementTree 中创建命名空间元素并不像添加前缀那么简单。 请参阅在 Python 中使用 ElementTree 发出命名空间规范中的最佳答案,以展示命名空间的工作原理:
et.register_namespace('ns0',"http://ns0.namespaces.org")
defs_element = xml.etree.ElementTree.Element('{http://ns0.namespaces.org}:defs')
  1. 你没有解释pc_defs_list来自哪里。 它可能加载到另一个文件中吗? C 版本的 ElementTree 对传入的确切类非常挑剔。因此,如果元素来自加载 ElementTree 的 python 版本的文件,则无法将它们插入到 ElementTree 中。 即使它们都加载了 ElementTree 的 C 版本(Python 3.3 之前的 cElementTree),如果它们不是从同一个二进制文件加载(例如,一个在虚拟环境中,一个在外部),则此消息出现(以前更神秘的argument 1 must be Element, not Element消息)。 这似乎不太可能出现在这里,因为您正在创建一个新的 SubElement 而不是直接附加现有元素。

曾经在 Django 环境中,我什至遇到过以下问题:

import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element

root = Element('root')
hi = ET.Element('hi')
root.append(hi)

抱怨它们是不兼容的对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM