我正在尝试在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必定有问题。
答案 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>