XSLT在select中将输出停止为空白

时间:2011-06-18 12:15:41

标签: xslt

首先我必须说明我今天第一次触及XSLT,因为有朋友请我帮忙。

我们正在尝试为GMaps生成链接。只要我们使用的变量中没有空格,一切都会起作用。这是代码。

<xslt:template name="buildmaps">
    <xslt:param name="linkstart"/>
    <xslt:param name="link_target_street"/>
    <xslt:param name="link_target_postalcode"/>
    <xslt:param name="link_target_city"/>
    <xslt:param name="linktext"/>
    <xslt:param name="target"/>
        <xslt:text disable-output-escaping="yes">&lt;a href=http://maps.google.de/maps?hl=de&amp;saddr=Hauptstr.%2057%2044789%20Bochum</xslt:text>
        <xslt:text disable-output-escaping="yes">&amp;daddr=</xslt:text>
        <xslt:value-of select="$link_target_street"/>
        <xslt:text disable-output-escaping="yes">%20</xslt:text>
        <xslt:value-of select="$link_target_postalcode"/>
        <xslt:text disable-output-escaping="yes">%20</xslt:text>
        <xslt:value-of select="$link_target_city"/>         
        <xslt:text disable-output-escaping="yes">" target="</xslt:text>
        <xslt:value-of select="$target"/>
        <xslt:text disable-output-escaping="yes">"&gt;</xslt:text>
        <xslt:value-of select="$linktext"/>
        <xslt:text disable-output-escaping="yes">&lt;/a&gt;</xslt:text>
</xslt:template>

$ link_target_street变量出现问题。看起来像“Bahnhofstr.9”。我们的链接就像“http://maps.google.de/...daddr=Hauptstr。”一样。所以一切都停在Hauptstr之间的空白处。和9。

我能做点什么吗?

提前谢谢。

更新

现在我知道我正在使用XSLT 1.0。所以没有替代我:(

现在有点关于输出:

它应该是这样的:

<a href="http://maps.google.de/maps?hl=de&amp;saddr=Hauptstr.%2057%2044789%20Bochum&amp;daddr=Mainstreet%2023%2012345%20Bochum" target="_blank">

问题在于街道名称。我得到了:

... &amp;daddr=Mainstreet 23%2012345%20Bochum" ...

但我需要

... &amp;daddr=Mainstreet%2023%2012345%20Bochum" ...

此时我不确定XSLT是否真的停在这个空白处,或者Url是否因为太破坏而无法正确处理。无论哪种方式,如果我可以将空白更改为'%20'一切都会好的。我想Tomalak的链接可能会帮助我。

不幸的是,我现在在家,必须自己设置一个测试环境,但我们找到了调试选项,所以我希望这会加快这个过程。

1 个答案:

答案 0 :(得分:2)

看起来你是在脚下射击自己。

<xslt:template name="buildmaps">
    <xslt:param name="linkstart"/>
    <xslt:param name="link_target_street"/>
    <xslt:param name="link_target_postalcode"/>
    <xslt:param name="link_target_city"/>
    <xslt:param name="linktext"/>
    <xslt:param name="target"/>
    <a href="http://maps.google.de/maps?hl=de&amp;saddr=Hauptstr.%2057%2044789%20Bochum&amp;daddr={$link_target_street}%20{$link_target_postalcode}%20{$link_target_city}" target="{$target}">
        <xslt:value-of select="$linktext"/>
    </a>
</xslt:template> 

请注意,Attribute Value Templates

此外,XSLT没有内置函数来进行URL编码。但是,当您想要将任意值放入URL时,您需要执行此操作。

有一个few methods to make a URL-encoding function available to XSLT,它取决于您的XSLT处理器which one would work for you