【发布时间】:2015-09-16 23:15:13
【问题描述】:
我对 Python ElementTree API 中的一些设计决策感到有些困惑 - 它们似乎有点武断,所以我想澄清一下这些决策背后是否有一些逻辑,或者它们是否是或多或少是临时的。
因此,通常有两种方法可以生成ElementTree - 一种是通过某种源流,如文件或其他 I/O 流。这是通过parse() 函数或ElementTree.parse() 类方法实现的。
另一种方法是直接从字符串对象加载 XML。这可以通过fromstring() 函数完成。
好的,太好了。现在,我认为这些函数在返回的内容方面基本上是相同的——它们两者之间的区别基本上是输入源(一个接受文件或流对象,另一个接受纯字符串。)除了出于某种原因,parse() 函数返回一个 ElementTree 对象,但 fromstring() 函数返回一个 Element 对象。区别基本上在于Element 对象是XML 树的root 元素,而ElementTree 对象是围绕根元素的某种“包装器”,它提供了一些额外的功能。您始终可以通过调用getroot() 从ElementTree 对象中获取根元素。
不过,我还是很困惑为什么我们会有这种区别。为什么fromstring()直接返回一个根元素,而parse()返回一个ElementTree对象?这种区别背后有什么逻辑吗?
【问题讨论】:
-
老实说,
ElementTreeAPI 有时会做出一些非常奇怪的决定,这就是其中之一。 -
我使用 lxml 并且 api 是相同的。我也想知道这些问题的答案。我倾向于将事情保持在包装级别,但我不知道为什么。
-
ElementTree 比 Element 有更多的功能,尤其是
write()。我并不是说不能为 Element 提供这些,但它们是主要的区别。fromstring()只给你一个 Element 可以有效地防止你更改和编写树。
标签: python