我的网址同时包含用于打开隐藏和显示的hsahtag,以及跟踪网址(查询字符串),例如http://pre-live/en-gb/information/help-and-contacts/contact-us#Group?clickpage=information-en--group-travel--index&kmtag=c&ban=||SH|2|CTA1|||||CampID||||L2|||||||以下
问题是#Group由于它后面的查询字符串而无法正常工作,它会在我们最后放置哈希标记时起作用。
所以任何人都可以这样做。
下面的是我的xslt部分
<div class="linkContainer">
<!-- Check if the URL we're tracking is internal (BA) or external, if it is internal it will return true-->
<xsl:variable name="trackingURL">
<xsl:apply-templates select="." mode="trackingURL">
<xsl:with-param name="trackURL" select="linkURL" />
</xsl:apply-templates>
</xsl:variable>
<xsl:variable name="link">
<xsl:value-of select="linkURL"/>
</xsl:variable>
<xsl:variable name="hash">
<xsl:value-of select="substring-after($link, '#')"/>
</xsl:variable>
<xsl:variable name="linkURL">
<xsl:if test="contains($link, '#')">
<xsl:value-of select="substring-before($link, '#')"/>
</xsl:if>
<xsl:if test="not(contains($link, '#'))">
<xsl:value-of select="$link"/>
</xsl:if>
</xsl:variable>
<a href="$PAGE_LINK[{$linkURL}]" title="{$titleTag}">
<xsl:if test="linkOpenStyle = 'newWindow'">
<xsl:attribute name="target">_blank</xsl:attribute>
</xsl:if>
<xsl:attribute name="class">
<xsl:if test="linkStyle='primary'">ui-priority-primary <xsl:value-of select="$linkStyleVal"/></xsl:if>
<xsl:if test="linkStyle='secondary'">ui-priority-secondary <xsl:value-of select="$linkStyleVal"/></xsl:if>
<xsl:if test="linkStyle='text'"><xsl:value-of select="$linkStyleVal"/></xsl:if>
</xsl:attribute>
<!-- Tracking params -->
<!-- It uses "self::node()" to apply the template to itself. We use that instead of "." because you can't use predicates on that. The params add the data attributes needed for tracking to work -->
<xsl:apply-templates select="self::node()[$tracking = 'yes' and $trackingURL = 'true']" mode="trackingParams">
<xsl:with-param name="click-position">
<xsl:apply-templates mode="buttonType" />
</xsl:with-param>
</xsl:apply-templates>
<!-- End Tracking -->
<xsl:value-of select="linkText" disable-output-escaping="yes" />
</a>
</div>
现在我已经从网址中删除了主题标签,我不确定将其放在href值中的位置和方式。
答案 0 :(得分:0)
需要注意的一点是,您可以在现有代码中使用xsl:choose
,以避免重复contains
测试。
<xsl:variable name="linkURL">
<xsl:choose>
<xsl:when test="contains($link, '#')">
<xsl:value-of select="substring-before($link, '#')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$link"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
话虽如此,您可以在单个陈述中实现您想要的。要获得hash
,您需要在&#34;#&#34;之后获取文本。但是如果它出现在查询字符串之前或之后,您需要满足。诀窍是附加一个假人&#34;?&#34;到您在表达式中使用的链接。
<xsl:variable name="hash" select="substring-before(substring-after(concat($link, '?'), '#'), '?')" />
您可以使用类似的技巧来获取没有哈希的URL的其余部分。这有两个部分,一个用于获取哈希之前的部分,另一个用于获取哈希之后的部分。
<xsl:variable name="linkURL">
<xsl:value-of select="substring-before(concat($link, '#'), '#')" />
<xsl:value-of select="substring-after($link, concat('#', $hash))" />
</xsl:variable>
在没有散列的情况下,第一个语句获取整个URL,第二个语句不返回任何内容。
例如,给定此XML
<links>
<link>
<linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us#Group?clickpage=information-en--group-travel--index&kmtag=c&ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL>
</link>
<link>
<linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&kmtag=c&ban=||SH|2|CTA1|||||CampID||||L2|||||||#Group</linkURL>
</link>
<link>
<linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&kmtag=c&ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL>
</link>
</links>
以下样式表
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="link">
<xsl:variable name="link" select="linkURL"/>
<xsl:variable name="hash" select="substring-before(substring-after(concat($link, '?'), '#'), '?')" />
<xsl:variable name="linkURL">
<xsl:value-of select="substring-before(concat($link, '#'), '#')" />
<xsl:value-of select="substring-after($link, concat('#', $hash))" />
</xsl:variable>
<xsl:copy>
<linkURL>
<xsl:value-of select="$linkURL" />
</linkURL>
<hash>
<xsl:value-of select="$hash" />
</hash>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
生成此输出
<link>
<linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&kmtag=c&ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL>
<hash>Group</hash>
</link>
<link>
<linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&kmtag=c&ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL>
<hash>Group</hash>
</link>
<link>
<linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&kmtag=c&ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL>
<hash/>
</link>