繁体   English   中英

python的lxml和iterparse方法

[英]python's lxml and iterparse method

说我有这个示例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,我如何获得每个结果集的每个字段的值? 基本上,我想迭代结果集,然后遍历该结果集中的每个字段并打印文本数据。

这是我到目前为止:

context = etree.iterparse(contentBuffer, tag='result')
for action, elem in context:
    print elem.tag, elem.data

任何帮助将不胜感激。

编辑这是我想出的代码。 看起来有点笨拙,不得不两次调用getparent()来读取相应文本值的属性。 有一个更好的方法吗?

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

我建议使用XPath查询 沿着r = tree.xpath('//text')应该足以满足您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM