Xslt 具有名称空间的GPX文件的XPath查询?
当GPX文件具有以下简单结构时,我可以通过xpath表达式Xslt 具有名称空间的GPX文件的XPath查询?,xslt,xpath,gpx,Xslt,Xpath,Gpx,当GPX文件具有以下简单结构时,我可以通过xpath表达式访问节点: <gpx> <trk> <trkseg> <trkpt lat="50.5324906" lon="7.0842605"> <ele>105.8824463</ele> <time>2010-07-11T08:50:16Z</time> </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>
105.8824463
2010-07-11T08:50:16Z
108.7662354
2010-07-11T08:50:44Z
...
当涉及名称空间时,如何实现相同的效果,例如:
<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">
在XSLT 1.0中:
<xsl:apply-templates
select="/g:gpx/g:trk/g:trkseg/g:trkpt"
xmlns:g="http://www.topografix.com/GPX/1/1"/>
在XSLT1.0中:
<xsl:apply-templates
select="/g:gpx/g:trk/g:trkseg/g:trkpt"
xmlns:g="http://www.topografix.com/GPX/1/1"/>
需要记住的是,默认名称空间与空名称空间不同,在xslt中,不在路径中指定名称空间是空名称空间,而不是默认名称空间。(不过,我相信默认名称空间对文本有效。) 因此,在xsl样式表中,需要使用前缀指定GPX名称空间 并在路径中使用该前缀:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:gpx="http://www.topografix.com/GPX/1/1" >
<xsl:template match="/">
<xsl:for-each select='gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt'>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
但通常最好使用显式名称空间。需要记住的是,默认名称空间与空名称空间不同,在xslt中,不在路径中指定名称空间是空名称空间,而不是默认名称空间。(不过,我相信默认名称空间对文本有效。) 因此,在xsl样式表中,需要使用前缀指定GPX名称空间 并在路径中使用该前缀:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:gpx="http://www.topografix.com/GPX/1/1" >
<xsl:template match="/">
<xsl:for-each select='gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt'>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
但通常最好使用显式名称空间。@Flack:谢谢!这让我有点夸张了。@Flack:谢谢!这让我觉得有点夸张。
<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>
Found 'trkseg' element
Found 'trkseg' element
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:gpx="http://www.topografix.com/GPX/1/1" >
<xsl:template match="/">
<xsl:for-each select='gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt'>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
select='//*[local-name(.)="trkpt"]'