如何为具有特定属性值的xml元素选择数据,并根据键区分多个元素?

时间:2013-11-19 09:27:32

标签: python xml parsing

假设:

  

使用xml.etree.ElementTree

<stream>
    <max id="500">
        <bar id="233" value="hell"/>
        <bar id="234" value="hello"/>
    </max>
</stream>

我想获取max元素中'value属性'的文本,其中键属性'id = 234'

我如何获得这个? 一个解决方案是,

  

for streams.findall('./ max / bar')中的fieldvalue:

   xmlKeyValue = fieldvalue.get('id')

   if xmlKeyValue == "234":

       sol  = fieldvalue.get('value')

       print sol

有没有更好的解决方案?单线解决方案?

2 个答案:

答案 0 :(得分:1)

使用的一种方式:

print(soup.find('stream').find('max').find('bar', attrs={'id':'234'})['value'])

它产生:

hello

答案 1 :(得分:1)

以下是使用进行操作的方法:

from lxml import etree

xml = """
<stream>
    <max id="500">
        <bar id="233" value="hell"/>
        <bar id="234" value="hello"/>
    </max>
</stream>"""

xml = etree.fromstring(xml)
print xml.xpath('//max/bar[@id=234]/@value')  # ['hello']