Xslt 使用XSL样式表将GPX导入Filemaker Pro
我了解GPSbabel,并使用它将GPX文件转换为CSV,然后导入Filemaker Pro进行操作。但是,我希望能够更简单、更简洁地将GPX文件导入FMP,并希望能够编写XSL样式表,将XML的GPX格式转换为FMPXMLRESULT语法 我正在查看来自Garmin Foretrex、Dakota、Nuvi和GPSmap296设备的GPX文件。我最近对XSL样式表的尝试(使用从各种示例中抄袭的代码片段)如下所示:Xslt 使用XSL样式表将GPX导入Filemaker Pro,xslt,filemaker,gpx,Xslt,Filemaker,Gpx,我了解GPSbabel,并使用它将GPX文件转换为CSV,然后导入Filemaker Pro进行操作。但是,我希望能够更简单、更简洁地将GPX文件导入FMP,并希望能够编写XSL样式表,将XML的GPX格式转换为FMPXMLRESULT语法 我正在查看来自Garmin Foretrex、Dakota、Nuvi和GPSmap296设备的GPX文件。我最近对XSL样式表的尝试(使用从各种示例中抄袭的代码片段)如下所示: <?xml version="1.0" encoding="UTF-8"?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="trkseg">
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-25-2011" NAME="FileMaker" VERSION="ProAdvanced 11.0v3"/>
<DATABASE DATEFORMAT="Yyyy-m-d" LAYOUT="" NAME="gpx_import_test.fp7" RECORDS="{@count}"
TIMEFORMAT="k:mm:ss "/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ele" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="lat" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="lon" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="time_text" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="@count">
<xsl:for-each select="trkpt">
<ROW MODID="0" RECORDID="{position()}">
<COL>
<DATA>
<xsl:value-of select="lat"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="lon"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="ele"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="time_text"/>
</DATA>
</COL>
</ROW>
</xsl:for-each>
</RESULTSET>
</FMPXMLRESULT>
</xsl:template>
</xsl:stylesheet>
0
当我尝试使用上面的样式表时,FMP抱怨“XML解析错误:无效的文档结构”
我欢迎任何建议——我想我犯了一些非常简单和明显的错误
问候
罗兰
这里是一个典型的GPX文件的剪贴版本,来自我正试图导入的Garmin Dakota 20
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1"
xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3"
xmlns:wptx1="http://www.garmin.com/xmlschemas/WaypointExtension/v1"
xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1"
creator="Dakota 20" version="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
http://www.garmin.com/xmlschemas/GpxExtensions/v3
http://www8.garmin.com/xmlschemas/GpxExtensionsv3.xsd
http://www.garmin.com/xmlschemas/WaypointExtension/v1
http://www8.garmin.com/xmlschemas/WaypointExtensionv1.xsd
http://www.garmin.com/xmlschemas/TrackPointExtension/v1
http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd">
<metadata>
<link href="http://www.garmin.com">
<text>Garmin International</text>
</link>
<time>2011-10-21T16:55:50Z</time>
</metadata>
<trk>
<name>Current Track: 20 OCT 2011 10:31</name>
<extensions>
<gpxx:TrackExtension>
<gpxx:DisplayColor>Black</gpxx:DisplayColor>
</gpxx:TrackExtension>
</extensions>
<trkseg>
<trkpt lat="51.6084605176" lon="-2.2182025295">
<ele>43.40</ele>
<time>2011-10-20T09:31:44Z</time>
</trkpt>
<trkpt lat="51.6084605176" lon="-2.2182025295">
<ele>47.24</ele>
<time>2011-10-20T09:31:53Z</time>
</trkpt>
</trkseg>
</trk>
</gpx>
佳明国际
2011-10-21T16:55:50Z
当前轨道:2011年10月20日10:31
黑色
43.40
2011-10-20T09:31:44Z
47.24
2011-10-20T09:31:53Z
这里有几个问题。其中之一是:
<xsl:template match="trkseg">
这还不够,因为trkseg
不仅仅是trkseg
,而是GPX命名空间中的trkseg
。如果没有正确的名称空间声明,样式表将根本找不到元素。最后一个问题是lat
和lon
是属性,您需要将它们称为@lat
和@lon
。以下是工作的XSLT:
<?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"
exclude-result-prefixes="gpx">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-25-2011" NAME="FileMaker" VERSION="ProAdvanced 11.0v3"/>
<DATABASE DATEFORMAT="Yyyy-m-d"
LAYOUT="" NAME="gpx_import_test.fp7" RECORDS="{@count}"
TIMEFORMAT="k:mm:ss "/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ele" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="lat" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="lon" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="time" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="count(//gpx:trkseg/gpx:trkpt)">
<xsl:for-each select="//gpx:trkseg/gpx:trkpt">
<ROW MODID="0" RECORDID="{position()}">
<COL>
<DATA>
<xsl:value-of select="@lat"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="@lon"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="gpx:ele"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="gpx:time"/>
</DATA>
</COL>
</ROW>
</xsl:for-each>
</RESULTSET>
</FMPXMLRESULT>
</xsl:template>
</xsl:stylesheet>
0
这里有几个问题。其中之一是:
<xsl:template match="trkseg">
这还不够,因为trkseg
不仅仅是trkseg
,而是GPX命名空间中的trkseg
。如果没有正确的名称空间声明,样式表将根本找不到元素。最后一个问题是lat
和lon
是属性,您需要将它们称为@lat
和@lon
。以下是工作的XSLT:
<?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"
exclude-result-prefixes="gpx">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="01-25-2011" NAME="FileMaker" VERSION="ProAdvanced 11.0v3"/>
<DATABASE DATEFORMAT="Yyyy-m-d"
LAYOUT="" NAME="gpx_import_test.fp7" RECORDS="{@count}"
TIMEFORMAT="k:mm:ss "/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ele" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="lat" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="lon" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="time" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="count(//gpx:trkseg/gpx:trkpt)">
<xsl:for-each select="//gpx:trkseg/gpx:trkpt">
<ROW MODID="0" RECORDID="{position()}">
<COL>
<DATA>
<xsl:value-of select="@lat"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="@lon"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="gpx:ele"/>
</DATA>
</COL>
<COL>
<DATA>
<xsl:value-of select="gpx:time"/>
</DATA>
</COL>
</ROW>
</xsl:for-each>
</RESULTSET>
</FMPXMLRESULT>
</xsl:template>
</xsl:stylesheet>
0
下面是一个xslt文件,用于仅读取航路点,而不是轨迹:By
方法:我在导入中添加了time、name、sym和type字段。如果
不需要,删除此文件中的相应行
将虚线下方的文本复制并存储在名为
“yourchoice.xslt”,其中“yourchoice”可以是您想要的任何名称,并且
将其用作filemaker中的xslt转换文件
0