是否可以在XSLT中执行内联条件(如果是其他的话)?类似的东西:
<div id="{if blah then blah else that}"></div>
或者是一个真实的用例/示例:
<div id="{if (@ID != '') then '@ID' else 'default'}"></div>
答案 0 :(得分:5)
正如评论中所提到的,if () then else
结构仅在XSLT / XPpath 2.0中受支持。
我自己的偏好是使用详细,但可读:
<xsl:template match="some-node">
<div>
<xsl:attribute name="ID">
<xsl:choose>
<xsl:when test="string(@ID)">
<xsl:value-of select="@ID"/>
</xsl:when>
<xsl:otherwise>default</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</div>
</xsl:template>
或者更短:
<xsl:template match="some-node">
<div ID="{@ID}">
<xsl:if test="not(string(@ID))">
<xsl:attribute name="ID">default</xsl:attribute>
</xsl:if>
</div>
</xsl:template>
但是,如果你遇到了神秘的代码,你可能会喜欢:
<xsl:template match="some-node">
<div ID="{substring(concat('default', @ID), 1 + 7 * boolean(string(@ID)))}">
</div>
</xsl:template>
或:
<xsl:template match="some-node">
<div ID="{concat(@ID, substring('default', 1, 7 * not(string(@ID))))}">
</div>
</xsl:template>