首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中解析XML子节点

在python中解析XML子节点
EN

Stack Overflow用户
提问于 2013-01-15 19:13:17
回答 2查看 3.7K关注 0票数 0

我得到了这个xml文件:

代码语言:javascript
复制
 <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”,我想返回"Title“:

到目前为止,我得到了这样的结论:

代码语言:javascript
复制
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“值,有什么更优雅的方法来返回子节点的值,这取决于另一个子节点是真还是假?

EN

回答 2

Stack Overflow用户

发布于 2013-01-15 19:23:59

使用xpath

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

票数 4
EN

Stack Overflow用户

发布于 2013-01-15 22:22:30

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

代码语言:javascript
复制
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)更容易阅读。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14336492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档