我有一个XML树,如:
<abc>
<cd>text1</cd>
<cd>text2</cd>
<ef>text3</ef>
<ef>text4</ef>
</abc>
现在我想将其保存为包含以下元组的列表:[(text1,text3),(text2,text4)]
。
我该怎么做?
答案 0 :(得分: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')]