<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="displayPIHomeLinks" match="/">
<div class="justPad">
<xsl:for-each select="Collection/Content">
<div class="brClear percPadTop">
<a class="defaultLinks" target="_blank">
<xsl:attribute name="href">
<xsl:value-of select="Html/root/lnkAttach/a/@href" />
</xsl:attribute>
<xsl:value-of select="Html/root/txtTitle" />
</a>
</div>
</xsl:for-each>
</div>
</xsl:template>
</xsl:stylesheet>
我遇到的问题是一些 href
是 PDF,我希望它在新窗口中打开,而其他是 ASPX,我想在同一窗口中打开。
请帮我完成那个。
最佳答案
使用 XSLT 2.0 时,可以使用 ends-with()
检查 href 值是否以 pdf 结尾并添加 target="'_blank'"
,示例 XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" doctype-public="XSLT-compat"
omit-xml-declaration="yes" encoding="UTF-8" indent="no" />
<xsl:strip-space elements="*"/>
<xsl:template match="lnkAttach">
<xsl:for-each select="a">
<a class="defaultLinks" >
<xsl:attribute name="href">
<xsl:value-of select="@href" />
</xsl:attribute>
<xsl:if test="ends-with(@href, 'pdf')">
<xsl:attribute name="target" select="'_blank'"/>
</xsl:if>
<xsl:value-of select="." />
</a>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
应用于此示例 XML 时:
<lnkAttach>
<a href="www.stackoverflow.com">Stackoverflow</a>
<a href="www.w3.org/People/maxf/XSLideMaker/tut.pdf">W3C XSL</a>
<a href="www.thedailywtf.com">Daily</a>
</lnkAttach>
产生以下输出:
<a class="defaultLinks" href="www.stackoverflow.com">Stackoverflow</a>
<a class="defaultLinks" href="www.w3.org/People/maxf/XSLideMaker/tut.pdf"
target="_blank">W3C XSL</a>
<a class="defaultLinks" href="www.thedailywtf.com">Daily</a>
如果 PDF 链接可能不是以 PDF 结尾,而是有一些额外的参数,您可以使用 contains()
相反,例如喜欢<xsl:if test="contains(@href, '.pdf')">
(只是添加了一个 .
以防链接目标包含 pdf
而没有扩展名)。
更新:刚刚更新了我的答案(调整为 XSLT 2.0),因为我刚刚注意到我用于测试的在线 XSLT 处理器虽然使用了 ends-with()
但没有抛出错误。在声明为版本 1.0 的 XSLT 中。对于 XSLT 1.0 解决方案,kjhughes 的答案是检查 href 是否以 .pdf 结尾的正确方法,或者您可以使用 contains()
按照建议。
关于xml - 如何根据 XSL 中的链接类型更改目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27156764/