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)会产生相同的结果。因此,我无法确定两者之间的差异。
答案 0 :(得分:2)
转储树(它是一个ElementTree)并转储elem(它是一个Element)导致同样的事情。
dump()
函数对ElementTree
和Element
的作用相同,因为它是故意以这种方式表现的:
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)
类名之间可能会有一些混淆。