2011-02-07 40 views

Respuesta

19
<xsl:choose> 
    <xsl:when test="element/@attribute"> 
    do one thing 
    </xsl:when> 
    <xsl:otherwise> 
    do something else 
    </xsl:otherwise> 
</xsl:choose> 
+2

Correcto, suponiendo que el nodo de contexto se encuentra en el elemento primario del elemento en cuestión. (Tiendo a sospechar que si el póster tiene dificultades en esta área, aún no se han dado cuenta de cómo funciona el contexto en XSLT.) –

26

Sólo tiene que utilizar:

<xsl:template match="someElement/@someAttrName"> 
    <!-- Whatever specific work when someElement has @someAttrName --> 
</xsl:template> 

<xsl:template match="someElement[not(@someAttrName)]"> 
    <!-- Whatever specific work when someElement has no @someAttrName --> 
</xsl:template> 

hacer la nota: En un código XSLT bien escrito el número de instrucciones condicionales (como <xsl:choose>, <xsl:when>, <xsl:otherwise>, <xsl:if>, ... etc.) está cerca de cero. En esta solución es 0.

+1

+1 Mejor respuesta. –

+1

De acuerdo +1 para una mejor respuesta –

+0

Si hubiera varias líneas del mismo trabajo para hacer que coincidan con "someElement", ¿cómo implementaría sin redundancia? Estoy usando esta solución que se muestra, pero solo hay una línea que es única entre mis dos plantillas y varias que son exactamente iguales. – Bryant

1
<xsl:value-of select="element[not(@attribute)]"/> 

si es necesario seleccionar algún elemento sin atributo

Cuestiones relacionadas