2015-05-29 1 views
2

Можно ли использовать встроенные условные обозначения (если есть еще) в XSLT? Что-то вроде:Как использовать встроенный условный (если он еще) в XSLT?

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

Или реального использования случая/например:

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

В XSLT 2.0, да. В XSLT 1.0 нет - хотя есть * * способ построить однострочный в * некоторых * ситуациях. Отправьте фактический пример. –

+0

добавил пример. – IMTheNachoMan

ответ

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> 
+0

Понял. Благодаря! – IMTheNachoMan

+0

Однострочники крутые и, если они поданы с комментарием, вполне удобоваримые –

Смежные вопросы