XSLT - 从谷歌地图网址获取lat和long

时间:2016-03-27 21:48:26

标签: xslt

在html中我有一个链接:

<a href="http://maps.apple.com/?ll=-23.590877,-46.689397&address=JK%20Iguatemi%20Avenida%20Presidente%20Juscelino%20Kubitschek,%202041,%20Itaim%20Bibi,%20São%20Paulo%20-%20SP,%2004543-011,%20Brésil" class="setItineraire">Discover</a>

如何从此网址获取lat和long(-23.590877和-46.689397)并将其分配给元素

<latitude><xsl:value-of select="" /></latitude>
<longitude><xsl:value-of select="" /></longitude>

这是我第一次遇到这种情况。

由于

1 个答案:

答案 0 :(得分:1)

假设您的HTML也是格式良好的XML(因此&个字符在未解析的文本中转义为&amp;,那么如果您使用的是XSLT 1.0,则需要执行此操作一些字符串操作。

首先从href属性中提取查询字符串。

<xsl:variable name="qs" select="concat('&amp;', substring-after(@href, '?'), '&amp;')" />

注意,我在字符串的开头和结尾添加&,以便更容易在下一位提取参数。

要提取ll参数的值,您可以执行此操作(额外的&符号确保它只找到ll=1,2而不是all=1,2

<xsl:variable name="ll" select="substring-before(substring-after($qs, '&amp;ll='), '&amp;')" />

这应该返回“-23.590877,-46.689397”,以获得纬度(或经度),然后你可以这样做

<latitude><xsl:value-of select="substring-before($ll, ',')" /></latitude>

试试这个模板

<xsl:template match="a">
    <xsl:variable name="qs" select="concat('&amp;', substring-after(@href, '?'), '&amp;')" />
    <xsl:variable name="ll" select="substring-before(substring-after($qs, '&amp;ll='), '&amp;')" />
    <position>
        <latitude><xsl:value-of select="substring-before($ll, ',')" /></latitude>
        <longitude><xsl:value-of select="substring-after($ll, ',')" /></longitude>          
    </position>
</xsl:template>

请注意,如果您使用的是XSLT 2.0,则可以使用tokenize函数来简化操作

<xsl:variable name="ll" select="tokenize(substring-after(@href, '?'), '&amp;')[starts-with(., 'll=')]" />