python的lxml和iterparse方法 [英] python's lxml and iterparse method
本文介绍了python的lxml和iterparse方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
说我有这个示例XML.
Say i have this sample XML.
<result>
<field k='field1'>
<value h='1'><text>text_value1</text></value>
</field>
<field k='field2'>
<value><text>text_value2</text></value>
</field>
<field k='field3'>
<value><text>some_text</text></value>
</field>
</result>
使用python的lxml,我如何获取每个结果集的每个字段的值?因此,基本上,我想遍历所有结果集,然后遍历该结果集中的每个字段并打印文本数据.
Using python's lxml, how can i get the value of each field for every result set? So basically, i want to iterate over ever result set, then iterate over every field in that result set and print the text data.
这是我到目前为止所拥有的:
This is what i have so far:
context = etree.iterparse(contentBuffer, tag='result')
for action, elem in context:
print elem.tag, elem.data
任何帮助将不胜感激.
编辑 这是我想出的代码.不得不调用两次getparent()来读取相应文本值的属性似乎有点笨拙.有更好的方法吗?
EDIT Here is the code that i came up with. It seems a bit clunky having to call getparent() twice to read the attribute of corresponding text value. Is there a better way to do this?
for action, elem in context:
list = elem.xpath('//text')
print "result set:"
for item in list:
field = item.getparent().getparent().attrib['k']
value = item.text
print "\t%s = %s"%(field, value)
推荐答案
怎么样:
import io
import lxml.etree as ET
content='''\
<result>
<field k='field1'>
<value h='1'><text>text_value1</text></value>
</field>
<field k='field2'>
<value><text>text_value2</text></value>
</field>
<field k='field3'>
<value><text>some_text</text></value>
</field>
</result>'''
contentBuffer=io.BytesIO(content)
context = ET.iterparse(contentBuffer,tag='result')
for action, elem in context:
fields=elem.xpath('field/@k')
values=elem.xpath('field/value/text/text()')
for field,value in zip(fields,values):
print('\t{f} = {v}'.format(f=field,v=value))
产生
field1 = text_value1
field2 = text_value2
field3 = some_text
这篇关于python的lxml和iterparse方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文