【问题标题】:Parse data from a .gpx file to CSV file将数据从 .gpx 文件解析为 CSV 文件
【发布时间】:2014-03-31 08:25:34
【问题描述】:

我有一个如下所示的 .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

【问题讨论】:

  • 你能发布想要的输出吗?

标签: java xml xslt csv gpx


【解决方案1】:

轻松使用 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&#xD;&#xA;</xsl:text>
        <xsl:for-each select="gpx/trk/trkseg/trkpt">
            <xsl:value-of select="concat(@lon, ',', @lat, ',', time, ',', ele, '&#xD;&#xA;')"/>
        </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 工具:freeformatter.com/xsl-transformer.html,但没有成功。
  • 我也尝试使用 msxsl.exe 实用程序,但它也不起作用。
  • 此样式表有效。它适用于 Xalan、Saxon 6、Saxon 9。寻找使用这些处理器之一的工具。您可以使用 XML Spy 或 Oxygen XML Editor 的试用版来完成。
  • 使用 XML Developer (oXygen) 转换失败,尽管它说两个文件都是有效的。
  • 与 XML Spy 相同。我一定是做错了什么。
【解决方案2】:

稍作修改的版本可以很好地处理“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,&#xD;&#xA;</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, '&#xD;&#xA;')"/>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 2023-03-23
    • 2011-02-28
    • 2022-08-02
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多