如何在XSLT中使用内联条件(如果是其他的话)?

时间:2015-05-29 15:45:11

标签: xslt sharepoint sharepoint-2010 xslt-1.0 dataviewwebpart

是否可以在XSLT中执行内联条件(如果是其他的话)?类似的东西:

<div id="{if blah then blah else that}"></div>

或者是一个真实的用例/示例:

<div id="{if (@ID != '') then '@ID' else 'default'}"></div>

1 个答案:

答案 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>