我有一个包含从http请求返回的XML数据的字符串.
我正在使用ElementTree来解析数据,然后我想以递归方式搜索一个元素.
根据这个问题,我只能递归搜索result.findall()if result是类型ElementTree而不是类型Element.
现在xml.etree.ElementTree.fromstring(),用于解析字符串,返回一个Element对象,而xml.etree.ElementTree.parse()用于解析文件,返回一个ElementTree对象.
我的问题是:我如何解析字符串并获取ElementTree实例?(没有像写临时文件那样疯狂)
我对Python ElementTree API中的一些设计决策感到有点困惑 - 它们似乎有点武断,所以我想澄清一下这些决定是否有一些逻辑,或者它们是否只是更多或者不那么特别.
因此,通常有两种方法可能需要生成ElementTree- 一种是通过某种源流,如文件或其他I/O流.这是通过parse()函数或ElementTree.parse()类方法实现的.
另一种方法是直接从字符串对象加载XML.这可以通过该fromstring()功能完成.
好,太棒了.现在,我认为这些函数在它们返回的内容方面基本相同 - 它们之间的差异基本上是输入源(一个采用文件或流对象,另一个采用普通字符串.)除了parse()函数返回一个ElementTree对象的某种原因,但该fromstring()函数返回一个Element对象.区别在于Element对象是XML树的根元素,而ElementTree对象是根元素周围的"包装器",它提供了一些额外的功能.您始终可以ElementTree通过调用从对象获取根元素getroot().
不过,我很困惑为什么我们有这种区别.为什么fromstring()直接返回根元素,但parse()返回一个ElementTree对象?这种区别背后有一些逻辑吗?