gpx 文件的 XSL 样式表
XSL Stylesheet for gpx file
我有一个 gpx 文件,我在 table 格式时对许多“名称”进行了一些编辑。一切正常,除了它在我的“扩展”文件夹之后移动了“名称”条目。它移动了我编辑的所有那些。我需要他们搬回“时间”之后的正确位置。有些条目是“空白”,这没关系。这是我将调用的文件示例 MadeUp.gpx 第一个条目是正确的,但第二个条目的顺序错误。我只需要像下面的 MadeUp.gpx 文件一样对所有内容进行排序。只要xsl模板文件正确,我有一些软件可以转换文件。
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:h="http://www.humminbird.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="Humminbird PC 4.6.1 [Build20190411001]" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
<wpt lat="32.02994571203832" lon="-97.42508814212279">
<ele />
<time>2021-08-25T20:46:53Z</time>
<name>Made Up</name>
<desc />
<sym>Fish</sym>
<extensions>
<h:uniqueid />
<h:group>My Data</h:group>
<h:edited />
<h:visible>true</h:visible>
<h:spotlock>false</h:spotlock>
<h:creator />
<h:viewas>IconOnly</h:viewas>
<h:color>Magenta</h:color>
<h:radiustoggle>false</h:radiustoggle>
<h:radiussafety>false</h:radiussafety>
<h:radius />
<h:depth />
<h:cursordepth />
<h:temperature />
<h:version>2</h:version>
</extensions>
</wpt>
<wpt lat="32.03012171740864" lon="-97.42471086455052">
<ele />
<time>2021-08-25T20:46:53Z</time>
<desc />
<sym>Fish</sym>
<extensions>
<h:uniqueid />
<h:group>My Data</h:group>
<h:edited />
<h:visible>true</h:visible>
<h:spotlock>false</h:spotlock>
<h:creator />
<h:viewas>IconOnly</h:viewas>
<h:color>Magenta</h:color>
<h:radiustoggle>false</h:radiustoggle>
<h:radiussafety>false</h:radiussafety>
<h:radius />
<h:depth />
<h:cursordepth />
<h:temperature />
<h:version>2</h:version>
</extensions>
<name>Made Up</name>
</wpt>
</gpx>
我试过根据正确的格式制作一个 xsl 模板,但是当我转换文件时,它给我一个错误,“不是有效的 xml 文件。
我尝试修改我在网上找到的一些示例,但 none 工作正常。我感谢任何帮助。谢谢你的时间。
这是我的 xsl 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:h="www.humminbird.com" version="1.0">
<xsl:output method="xml" encoding="utf-8" indent="no" />
<xsl:template match="gpx">
<xsl:text>;lat, lon, Time, name, desc, sym, extensions, h:uniqueid, h:group, h:edited, h:visible, h:spotlock, h:creator, h:viewas, h:color, h:radiustoggle,h:radiussafety, h:radius, h:depth, h:cursordepth, h:temperature, h:version</xsl:text>
<xsl:apply-templates select="wpt" />
</xsl:template>
<xsl:template match="wpt">
<xsl:value-of select="@lat" />
<xsl:text>,</xsl:text>
<xsl:value-of select="@lon" />
<xsl:text>,</xsl:text>
<xsl:value-of select="time" />
<xsl:text>,</xsl:text>
<xsl:value-of select="name" />
<xsl:text>,</xsl:text>
<xsl:value-of select="desc" />
<xsl:text>,</xsl:text>
<xsl:value-of select="sym" />
<xsl:text>,</xsl:text>
<xsl:value-of select="extensions" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:uniqueid" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:group" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:edited" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:visible" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:spotlock" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:creator" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:viewas" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:color" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:radiustoggle" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:radiussafety" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:radius" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:depth" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:cursordepth" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:temperature" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:version" />
<xsl:text>,</xsl:text>
</xsl:template>
</xsl:stylesheet>
不确定您使用什么软件进行转换,所以我假设您仅限于 XSLT 1.0。
我会这样做:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:gpx="http://www.topografix.com/GPX/1/1">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="gpx:wpt">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(self::gpx:name)]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="gpx:time">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<xsl:apply-templates select="../gpx:name"/>
</xsl:template>
</xsl:stylesheet>
我有一个 gpx 文件,我在 table 格式时对许多“名称”进行了一些编辑。一切正常,除了它在我的“扩展”文件夹之后移动了“名称”条目。它移动了我编辑的所有那些。我需要他们搬回“时间”之后的正确位置。有些条目是“空白”,这没关系。这是我将调用的文件示例 MadeUp.gpx 第一个条目是正确的,但第二个条目的顺序错误。我只需要像下面的 MadeUp.gpx 文件一样对所有内容进行排序。只要xsl模板文件正确,我有一些软件可以转换文件。
<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:h="http://www.humminbird.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="Humminbird PC 4.6.1 [Build20190411001]" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
<wpt lat="32.02994571203832" lon="-97.42508814212279">
<ele />
<time>2021-08-25T20:46:53Z</time>
<name>Made Up</name>
<desc />
<sym>Fish</sym>
<extensions>
<h:uniqueid />
<h:group>My Data</h:group>
<h:edited />
<h:visible>true</h:visible>
<h:spotlock>false</h:spotlock>
<h:creator />
<h:viewas>IconOnly</h:viewas>
<h:color>Magenta</h:color>
<h:radiustoggle>false</h:radiustoggle>
<h:radiussafety>false</h:radiussafety>
<h:radius />
<h:depth />
<h:cursordepth />
<h:temperature />
<h:version>2</h:version>
</extensions>
</wpt>
<wpt lat="32.03012171740864" lon="-97.42471086455052">
<ele />
<time>2021-08-25T20:46:53Z</time>
<desc />
<sym>Fish</sym>
<extensions>
<h:uniqueid />
<h:group>My Data</h:group>
<h:edited />
<h:visible>true</h:visible>
<h:spotlock>false</h:spotlock>
<h:creator />
<h:viewas>IconOnly</h:viewas>
<h:color>Magenta</h:color>
<h:radiustoggle>false</h:radiustoggle>
<h:radiussafety>false</h:radiussafety>
<h:radius />
<h:depth />
<h:cursordepth />
<h:temperature />
<h:version>2</h:version>
</extensions>
<name>Made Up</name>
</wpt>
</gpx>
我试过根据正确的格式制作一个 xsl 模板,但是当我转换文件时,它给我一个错误,“不是有效的 xml 文件。 我尝试修改我在网上找到的一些示例,但 none 工作正常。我感谢任何帮助。谢谢你的时间。 这是我的 xsl 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:h="www.humminbird.com" version="1.0">
<xsl:output method="xml" encoding="utf-8" indent="no" />
<xsl:template match="gpx">
<xsl:text>;lat, lon, Time, name, desc, sym, extensions, h:uniqueid, h:group, h:edited, h:visible, h:spotlock, h:creator, h:viewas, h:color, h:radiustoggle,h:radiussafety, h:radius, h:depth, h:cursordepth, h:temperature, h:version</xsl:text>
<xsl:apply-templates select="wpt" />
</xsl:template>
<xsl:template match="wpt">
<xsl:value-of select="@lat" />
<xsl:text>,</xsl:text>
<xsl:value-of select="@lon" />
<xsl:text>,</xsl:text>
<xsl:value-of select="time" />
<xsl:text>,</xsl:text>
<xsl:value-of select="name" />
<xsl:text>,</xsl:text>
<xsl:value-of select="desc" />
<xsl:text>,</xsl:text>
<xsl:value-of select="sym" />
<xsl:text>,</xsl:text>
<xsl:value-of select="extensions" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:uniqueid" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:group" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:edited" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:visible" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:spotlock" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:creator" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:viewas" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:color" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:radiustoggle" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:radiussafety" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:radius" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:depth" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:cursordepth" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:temperature" />
<xsl:text>,</xsl:text>
<xsl:value-of select="h:version" />
<xsl:text>,</xsl:text>
</xsl:template>
</xsl:stylesheet>
不确定您使用什么软件进行转换,所以我假设您仅限于 XSLT 1.0。
我会这样做:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:gpx="http://www.topografix.com/GPX/1/1">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="gpx:wpt">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(self::gpx:name)]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="gpx:time">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<xsl:apply-templates select="../gpx:name"/>
</xsl:template>
</xsl:stylesheet>