XSLT:在foreach中做一个if-else

时间:2013-02-04 04:02:01

标签: asp.net xslt if-statement foreach line-breaks

我正在尝试在XSLT中的foreach语句中插入if-else语句。 这个想法是,如果节点存在,它将插入一个换行符。这是我到目前为止所做的

<xsl:for-each select="Books/Publisher/[BookTitle]">
                  <strong>
                    <xsl:value-of select=" BookTitle " />
                  </strong>
<xsl:if test=" Books/Publisher/BookTitle">!= ''">
        <br/>  
      </xsl:if>
</xsl:for-each>

问题是,当我插入if-else语句时,换行标记不会出现,但只有当我完全删除if else时才会出现。有人向我解释为什么会发生这种情况,因为我已经检查了节点在那里,插入换行符应该工作。所以在foreach循环中if-else必定有问题。

1 个答案:

答案 0 :(得分:3)

我认为你的目标是:

<xsl:for-each select="Books/Publisher[BookTitle]">
  <strong>
    <xsl:value-of select="BookTitle" />
  </strong>
  <xsl:if test="BookTitle != ''">
    <br/>
  </xsl:if>
</xsl:for-each>

但如果我理解正确,看起来你真正要做的就是输出所有非空白书籍,然后换行,所以这可能是一个更好的方法:

<xsl:for-each select="Books/Publisher/BookTitle[. != '']">
  <strong>
    <xsl:value-of select="." />
  </strong>
  <br/>
</xsl:for-each>

或者更好:

<xsl:apply-templates select="Books/Publisher/BookTitle[. != '']" />

<!-- .....  (separate template in the XSLT) -->
<xsl:template match="BookTitle">
  <strong>
    <xsl:value-of select="." />
  </strong>
  <br/>
</xsl:template>