2012-01-13 75 views
-1

我有一個像XML樹:如何將XML轉換成列表

<abc> 
    <cd>text1</cd> 
    <cd>text2</cd> 
    <ef>text3</ef> 
    <ef>text4</ef> 
</abc> 

現在我想將它保存爲像元組的列表:[(text1,text3),(text2,text4)]

我該怎麼做?

+0

你只是試圖解析信息了XML的?如果是這樣,不同的方法可能會更好。有Python可用的XML解析庫,比如BeautifulSoup – Peter 2012-01-13 11:09:43

+0

我已經嘗試過使用lxml庫,但是iam能夠將它保存爲'[text1,text2,text3,text4]' – 2012-01-13 11:12:17

+0

作爲字符串讀取,然後按鍵組合,應該沒問題。 – 2012-01-13 11:18:26

回答

3
import xml.etree.cElementTree as ET 
# import lxml.etree as ET # also works 

content = '''\ 
<abc> 
    <cd>text1</cd> 
    <cd>text2</cd> 
    <ef>text3</ef> 
    <ef>text4</ef> 
</abc>''' 

doc = ET.fromstring(content) 
texts = (x.text for x in doc) 
print(zip(*zip(*[texts]*2))) 

產生

[('text1', 'text3'), ('text2', 'text4')] 

說明:

你已經知道如何解析XML到像這樣的列表:

In [8]: [x.text for x in doc] 
Out[8]: ['text1', 'text2', 'text3', 'text4'] 

組項目由2 ,使用grouper recipe,zip(*[iter]*2)

In [11]: zip(*[texts]*2) 
Out[11]: [('text1', 'text2'), ('text3', 'text4')] 

現在你可以再次使用zip包組的第一個項目從每一個元組,那麼第二個項目,等:

In [14]: zip(*zip(*[texts]*2)) 
Out[14]: [('text1', 'text3'), ('text2', 'text4')] 
+0

在這種情況下stdlib就足夠了:'import xml.etree.cElementTree as ET' – jfs 2012-01-13 11:21:03

+0

thankyou ... that working – 2012-01-13 11:24:22

+0

感謝您的評論;如此編輯。 – unutbu 2012-01-13 11:26:26