在XSLT 2.0中,我使用 xsl:for-each 循环生成一系列html <a> 元素,这些循环基于从 tokenize() 派生的字符串序列, <a> 元素的序列存储在变量_25719中:

<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"> 的负面结果可能会在两个逗号之间产生一个空白......