2011-12-20 126 views
19

我有一個字符串,它包含從http請求返回的XML數據。Python ElementTree:解析字符串並獲取ElementTree實例

我使用ElementTree解析數據,然後我想要遞歸搜索元素。

this question,我只能用遞歸搜索result.findall()如果resultElementTree型的,而不是鍵入Element

現在xml.etree.ElementTree.fromstring(),用於分析該字符串,返回一個Element對象,而xml.etree.ElementTree.parse(),用於分析一個文件,返回一個ElementTree對象。

我的問題是:如何解析字符串並獲得ElementTree實例?(不喜歡寫到一個臨時文件的任何瘋狂)

回答

25

當您使用ElementTree.fromstring()什麼你找回基本上是樹的根,所以如果你創建一個這樣ElementTree.ElementTree(root)一個新的樹,你會得到你」重新尋找。

所以,這樣可以很清楚:

from xml.etree import ElementTree 
tree = ElementTree.ElementTree(ElementTree.fromstring(<your_xml_string>)) 

或:

from xml.etree.ElementTree import fromstring, ElementTree 
tree = ElementTree(fromstring(<your_xml_string>)) 
+0

我只是想添加 - 對於那些使用lxml的人來說 - 你可以使用getrootttree()方法,在lxml中(即元素總是屬於文檔/樹,即使是隱含的)。 – Steven 2011-12-21 11:12:13

+0

謝謝!在etree中真的很煩人的API設計,根據輸入源具有不同類型的輸出。真的很讓人困惑:( – 2013-03-22 13:43:48

+0

這在文檔中確實不是很清楚。「fromstring()將XML從字符串中直接解析到元素中,這是解析樹的根元素,其他解析函數可能會創建ElementTree。」 – Snorfalorpagus 2013-11-20 14:32:47

6

將您的字符串轉換爲一個類文件對象,並使用ElementTree.parse

from xml.etree import ElementTree 
from cStringIO import StringIO 

tree = ElementTree.parse(StringIO(string)) 
+0

太棒了,這是我一直在尋找的。:-) – 2016-08-19 05:51:29