ElementTree和Element之间有什么区别? (python xml)

时间:2015-06-12 22:38:21

标签: python xml element elementtree

from xml.etree.ElementTree import ElementTree, Element, SubElement, dump

elem = Element('1')
sub = SubElement(elem, '2')
tree = ElementTree(elem)

dump(tree)
dump(elem)

在上面的代码中,转储树(它是一个ElementTree)和转储elem(它是一个Element)会产生相同的结果。因此,我无法确定两者之间的差异。

2 个答案:

答案 0 :(得分:2)

  

转储树(它是一个ElementTree)并转储elem(它是一个Element)导致同样的事情。

dump()函数对ElementTreeElement的作用相同,因为它是故意以这种方式表现的:

def dump(elem):
    # debugging
    if not isinstance(elem, ElementTree):
        elem = ElementTree(elem)
    elem.write(sys.stdout)
    ...
  

我无法确定两者之间的差异。

ElementTree是一个包装类,它对应于提供序列化功能的“整个元素层次结构” - 转储和加载树。另一方面,Element是一个定义Element接口的“更大”的类。

答案 1 :(得分:1)

ElementTree包装器类用于读取和写入XML文件[ref]。大多数ElementTree api是围绕根Element [ref]的简单包装。简而言之,ElementTree包装了根Element(为方便起见),并提供了对整个树进行序列化/反序列化的方法。因此,parse()属于ElementTree,其中iter()是一个简单的包装器。

然后,iterparse名称空间中有诸如dump()xml.etree.ElementTree之类的辅助函数。 dump()向stdout [ref]写入完整的xml文档,而iterparse迭代地吐出Element。对比parse()xml.etree.ElementTree.ElementTree,返回一个iterparse()对象,从而返回一个完整的层次结构,xml.etree.ElementTree返回一个迭代器[1]。

1 xml.etree.ElementTree.ElementTree软件包名称空间和print(prediction.name) 类名之间可能会有一些混淆。