解析数据文件
我有一个.GPX文件看起来像这样:解析数据文件
<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.1">
<metadata>
<author>
<name>asd</name>
<email id="asd" domain="gmail.com"/>
</author>
<link href="http://www.endomondo.com">
<text>Endomondo</text>
</link>
<time>2014-03-25T15:58:33Z</time>
</metadata>
<trk>
<src>http://www.endomondo.com/</src>
<link href="http://www.endomondo.com/workouts/246394762/4704124">
<text>endomondo</text>
</link>
<type>MOUNTAIN_BIKING</type>
<trkseg>
<trkpt lat="12.123456" lon="12.123456">
<time>2013-09-16T12:01:23Z</time>
</trkpt>
<trkpt lat="12.123456" lon="12.123456">
<ele>627.5</ele>
<time>2013-09-16T12:01:28Z</time>
</trkpt>
...additional <trkpt> nodes
</trk>
我想提取每个trkpt节点的经度和纬度,时间和高程值和将它们输出为CSV文件。我听说过XSLT转换,但我不知道如何编写它们。另一种方法是使用xml/gpx解析器。
有没有更快的方法我可以检索这些值?
输出CSV应该在这个形式:
latitude \t longitude \t elevation(if present) \t time
容易使用XSLT-1.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>longitude,latitude,time,elevation
</xsl:text>
<xsl:for-each select="gpx/trk/trkseg/trkpt">
<xsl:value-of select="concat(@lon, ',', @lat, ',', time, ',', ele, '
')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
它输出
longitude,latitude,time,elevation
12.123456,12.123456,2013-09-16T12:01:23Z,
12.123456,12.123456,2013-09-16T12:01:28Z,627.5
这看起来很棒。请告诉我可以执行这个转换的程序是什么?尝试了一个在线XSL Transformer工具:http://www.freeformatter.com/xsl-transformer.html,但它没有奏效。 – TheAptKid
我也尝试使用msxsl.exe工具,这也不起作用。 – TheAptKid
这个样式表是有效的。它可以与Xalan,Saxon 6,Saxon 9一起使用。查找使用其中一个处理器的工具。您可以使用XML Spy或Oxygen XML Editor的试用版进行操作。 – helderdarocha
略加修改正常工作与“MSXML。 exe'处理Garmin GPX文件。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gpx="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
<xsl:output method="text" indent="yes" encoding="utf-8"/>
<xsl:template match="/">
<xsl:text>latitude,longitude,elevation,time,
</xsl:text>
<xsl:for-each select="/gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt">
<xsl:value-of select="concat(@lat, ',', @lon, ',', gpx:ele, ',', gpx:time, '
')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
您可以发布所需的输出吗? –