<?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,我想在同一个窗口中打开。
请帮我完成。
答案 0 :(得分:3)
使用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()
。
答案 1 :(得分:2)
以下是如何输出a
,以便@target
的后缀取决于@href
的后缀:
<xsl:variable name="href" select="Html/root/lnkAttach/a/@href"/>
<xsl:variable name="pdf_suffix" select="'.pdf'"/>
<a class="defaultLinks">
<xsl:if test="$pdf_suffix =
substring($href, string-length($href) - string-length($pdf_suffix)+1)">
<xsl:attribute name="target">_blank</xsl:attribute>
</xsl:if>
<xsl:attribute name="href">
<xsl:value-of select="$href"/>
</xsl:attribute>
<xsl:value-of select="Html/root/txtTitle"/>
</a>
请注意,substring()
构造是在没有XPath 2.0的情况下执行ends-with()
的XPath 1.0方法。