在XSLT 2.0中,我基于从<a>
派生的字符串序列和xsl:for-each
元素序列,使用tokenize()
循环使用html <a>
元素序列存储在变量corresp
中:
<xsl:variable name="tokenparam" select="tokenize($paramCorrespdocs,'~')"/>
<xsl:variable name="corresp">
<xsl:for-each select="$tokenparam">
<xsl:if test="string(.) != $currdoc">
<xsl:if test="someXPATH">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="someXPATH"/>
</xsl:attribute>
<xsl:value-of select="someXPATH"/>
</xsl:element>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:variable>
这可能是构造一系列带分隔符的HTML元素的错误方法,但我的目标是输出由<a>
分隔的,
元素的序列,如下所示:
<a href="somelink">content</a>, <a href="somelink">content</a>, <a href="somelink">content</a>, <a href="somelink">content</a>
但是我找不到与Xquery map !
等效的XSLT。常见的<xsl:if test="position() > 1">
似乎不起作用,因为测试<xsl:if test="string(.) != $currdoc">
无法保证位置。
我应该这样,我不必将其放入变量corresp
中。我只是认为这是一种以定界形式输出最终结果的方法。
非常感谢。
编辑:我尝试过
<xsl:variable name="tokenparam" select="tokenize($paramCorrespdocs,'~')"/>
<xsl:for-each select="$tokenparam[not(. = $currdoc)]">
<xsl:if test="someXPATH">
<xsl:if test="position()>1">, </xsl:if>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="someXPATH"/>
</xsl:attribute>
<xsl:value-of select="someXPATH"/>
</xsl:element>
</xsl:if>
</xsl:for-each>
尽管它假设一个完美的世界,但测试<xsl:if test="someXPATH">
的否定结果可能会在两个逗号之间造成空白...