我有一个.tcx(XML)文件,其模式如下:
<Activities>
<Activity>
<Lap StartTime="2015-12-24T08:12:18.969Z">
<TotalTimeSeconds>4069.0</TotalTimeSeconds>
<DistanceMeters>30458.794921875</DistanceMeters>
<MaximumSpeed>43.36123275756836</MaximumSpeed>
<Calories>2286</Calories>
<AverageHeartRateBpm><Value>144</Value></AverageHeartRateBpm><MaximumHeartRateBpm><Value>169</Value></MaximumHeartRateBpm>
<Intensity>Active</Intensity>
<Cadence>87</Cadence>
<TriggerMethod>Manual</TriggerMethod>
<Track>
<Trackpoint>
<Time>2015-12-24T08:12:19.969Z</Time>
<Position><LatitudeDegrees>45.4917</LatitudeDegrees><LongitudeDegrees>9.16198</LongitudeDegrees></Position>
<AltitudeMeters>124.018</AltitudeMeters>
<DistanceMeters>0.0</DistanceMeters>
<SensorState>Present</SensorState>
<Extensions><TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2"><Watts>0</Watts></TPX></Extensions></Trackpoint>
...
</Track>
</Lap>
</Activity>
</Activities>
并且需要更改(加倍)Watts属性。 想要一个简单的python脚本
只需运行一个XSLT脚本。不需要Python循环或昂贵的xpath(
//
)。作为信息,XSLT是一种声明性的、特殊用途的编程语言,专门用于根据各种最终用途的需要重新构造、重新设计或重新格式化XML文档。与大多数通用语言(如Java、C#、Perl、PHP、VB)一样,Python在其lxml模块中配备了xslt1.0处理器。在下面运行一个标识转换以按原样复制整个文档,然后将任何Watts节点中的当前值乘以2。我在XSLT中声明一个名称空间
doc
,以引用Watts元素。在XSLT(另存为.xsl或.XSLT)
Python脚本
^{pr2}$最后两个元素标记需要是结束标记,并且您有一个Watts元素而不是一个属性。下面是如何使用你的文件结构。在
Python为此提供了ElementTree库。以下脚本将完成您想要的:
在这里,我导入ElementTree库并使用一个更简单的名称。parse函数从文件创建一个ElementTree对象。我遍历该文件以找到所有Watts元素(因为这些元素出现在一个名称空间中,我实际上需要查找{http://www.garmin.com/xmlschemas/ActivityExtension/v2}}Watts,它是我使用字符串格式构建的)。在
当我找到这样的元素时,我将内部文本设置为前一个值的两倍(先转换为int,然后再转换回字符串)。在
最后,我写出新的xml文件。如果我愿意的话,我可以在这里重写原始文件。在
如果您需要做一些更有趣的事情,请查看ElementTree模块的文档。它为处理XML提供了非常强大的工具。如果您需要更多的特性,还有更强大的库(例如,我喜欢lxml)。在
相关问题 更多 >
编程相关推荐