当GPX文件具有以下简单结构时,我能够<trkpt></trkpt>
通过xpath表达式访问节点<xsl:for-each select='gpx/trk/trkseg/trkpt'>
:
<gpx>
<trk>
<trkseg>
<trkpt lat="50.5324906" lon="7.0842605">
<ele>105.8824463</ele>
<time>2010-07-11T08:50:16Z</time>
</trkpt>
<trkpt lat="50.5323745" lon="7.0843524">
<ele>108.7662354</ele>
<time>2010-07-11T08:50:44Z</time>
</trkpt>
...
</trkseg>
</trk>
</gpx>
Run Code Online (Sandbox Code Playgroud)
如何在涉及名称空间时实现相同的效果,例如:
<gpx xmlns="http://www.topografix.com/GPX/1/1"
creator="MapSource 6.15.11"
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">
Run Code Online (Sandbox Code Playgroud)
小智 6
In XSLT 1.0:
<xsl:apply-templates
select="/g:gpx/g:trk/g:trkseg/g:trkpt"
xmlns:g="http://www.topografix.com/GPX/1/1"/>
Run Code Online (Sandbox Code Playgroud)
In XSLT 2.0:
<xsl:apply-templates
select="/gpx/trk/trkseg/trkpt"
xpath-default-namespace="http://www.topografix.com/GPX/1/1"/>
Run Code Online (Sandbox Code Playgroud)
So, you need to declare the namespace (prefix, URI) in your stylesheet and add this namespace in your QName test of XPath expression.
As example, this XSLT 1.0 stylesheet:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:g="http://www.topografix.com/GPX/1/1">
<xsl:output method="text"/>
<xsl:template match="g:trkpt">
<xsl:text>Found 'trkseg' element
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
And this XSLT 2.0 stylesheet:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="http://www.topografix.com/GPX/1/1">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="trkpt">
<xsl:text>Found 'trkseg' element
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
With this input:
<gpx xmlns="http://www.topografix.com/GPX/1/1"
creator="MapSource 6.15.11"
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">
<trk>
<trkseg>
<trkpt lat="50.5324906" lon="7.0842605">
<ele>105.8824463</ele>
<time>2010-07-11T08:50:16Z</time>
</trkpt>
<trkpt lat="50.5323745" lon="7.0843524">
<ele>108.7662354</ele>
<time>2010-07-11T08:50:44Z</time>
</trkpt>
</trkseg>
</trk>
</gpx>
Run Code Online (Sandbox Code Playgroud)
Both output:
Found 'trkseg' element
Found 'trkseg' element
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1501 次 |
最近记录: |