【问题标题】:ElementTree XPath ExpressionElementTree XPath 表达式
【发布时间】:2012-11-20 14:23:19
【问题描述】:

这是我的 XML 文件内容:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.garmin.com/xmlschemas/ActivityExtension/v2 http://www.garmin.com/xmlschemas/ActivityExtensionv2.xsd http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">

  <Activities>
    <Activity Sport="Running">
      <Id>2012-11-17T16:41:52Z</Id>
      <Lap StartTime="2012-11-17T16:41:52Z">
        <TotalTimeSeconds>473.6400000</TotalTimeSeconds>
        <DistanceMeters>1600.0000000</DistanceMeters>
      </Lap>
    </Activity>
  </Activities>
</TrainingCenterDatabase>

我想在 Python 中使用 Elemtenttree 选择所有 Lap 节点:

tree = ET.parse(fileName)
elem = tree.getroot()

for ele in elem.findall('.//Lap'):
    print ele

但是上面的代码不起作用..

有人知道如何选择 Lap 节点吗?

【问题讨论】:

  • “不起作用”不是正确的问题描述。如果有的话,您会得到什么结果,或者是否有错误?
  • 我将你的结束标签重命名为&lt;/TrainingCenterDatabase&gt;(删除了s

标签: python elementtree


【解决方案1】:

你需要指定命名空间:

>>> tree.findall('.//{http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2}Lap')
[<Element '{http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2}Lap' at 0x4698f90>]

【讨论】:

  • 谢谢,我刚刚打印了标签名称并看到了命名空间。我是否总是必须指定命名空间,或者是否可以选择在没有命名空间的情况下使用标签?
  • @user1451130 查看effbot.org/zone/element-namespaces.htm - 不过要感谢 Martijn Pieters...
猜你喜欢
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
相关资源
最近更新 更多