在python中解析xml子节点

时间:2013-01-15 11:13:17

标签: python xml

我有这个xml文件:

 <ItemArray>
    <Item>
      <GiftIcon>0</GiftIcon>
      <HitCounter>NoHitCounter</HitCounter>
      <Quantity>1</Quantity>
      <TimeLeft>P9DT17H35M6S</TimeLeft>
      <Title>Table</Title>
    </Item>
    <Item>
      <GiftIcon>0</GiftIcon>
      <HitCounter>NoHitCounter</HitCounter>
      <Quantity>1</Quantity>
      <TimeLeft>PT0S</TimeLeft>
      <Title>Chair</Title>
    </Item>
  </ItemArray>

如果“TimeLeft”不是“PT0S”,我想返回“标题”:

到目前为止,我已经得到了这个:

itemList = response.getElementsByTagName('Item')
children = itemList[0].childNodes
for child in children :
  if child.tagName == "TimeLeft":
    if child.childNodes[0].nodeValue == "PT0S": 
       print "ping"

但我不知道如何从那里回到“Title”值,如果另一个childnode是true还是false,返回childnode值的更优雅方法是什么?

2 个答案:

答案 0 :(得分:4)

使用xpath

doc.xpath('.//item[timeleft/text()!="PT0S"]/title/text()'

答案 1 :(得分:2)

您可以使用Python的ElementTree API和简单的列表理解:

import xml.etree.ElementTree as ET

tree = ET.parse('your_xml_file.xml')
root = tree.getroot()

titles = [item.find('Title').text for item in root.findall('Item') if item.find('TimeLeft').text != 'PT0S']

titles将是TimeLeft不是PT0S的项目标题列表。在我看来,这比基于XPath的解决方案(如果你不熟悉XPath)更容易阅读。