'''
Elementtree 主要是一个包装在具有根节点的树周围的文档。
它提供了一些用于序列化和一般文档处理的方法。
'''
root = etree.XML('''\
<?xml version="1.0"?>
<!DOCTYPE root SYSTEM "test" [ <!ENTITY tasty "parsnips"> ]>
<root>
<a>&tasty;</a>
</root>
''')
tree = etree.ElementTree(root)
print(tree.docinfo.xml_version)
print(tree.docinfo.doctype)
tree.docinfo.public_id = '-//W3C//DTD XHTML 1.0 Transitional//EN'
tree.docinfo.system_url = 'file://local.dtd'
print(tree.docinfo.doctype)
'''
当您调用 parse ()函数来解析文件或类似文件的对象(请参阅下面的解析部分)时,也会得到 ElementTree。
其中一个重要的区别是 ElementTree 类序列化为一个完整的文档,而不是单个 Element。
这包括*处理指令和注释,以及文档中的 DOCTYPE 和其他 DTD 内容:
'''
print(etree.tostring(tree))
'''
在最初的 xml.etree 中。 在1.3.3版本的 lxml 中,ElementTree 实现的输出看起来和只序列化根 Element 时一样:
'''
print(etree.tostring(tree.getroot()))
'''
这种序列化行为在 lxml 1.3.4中发生了变化。 之前,该树在没有 DTD 内容的情况下被序列化,这使 lxml 在一个输入-输出循环中丢失 DTD 信息。
'''