2011-02-07 17 views

risposta

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

Corretto, assumendo che il nodo di contesto sia posizionato sul genitore dell'elemento in questione. (Tenderei a sospettare che se il poster ha difficoltà in questo settore, non hanno ancora capito come funziona il contesto in XSLT.) –

26

Basta usare:

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

Do atto: In un codice XSLT ben scritto il numero di istruzioni condizionali (come <xsl:choose>, <xsl:when>, <xsl:otherwise>, <xsl:if>, ... ecc.) è vicino a zero. In questa soluzione si è 0.

+1

+1 Risposta migliore. –

+1

Accettato +1 per una risposta migliore –

+0

Se ci sono più linee dello stesso lavoro che corrispondono a "someElement", come implementeresti senza ridondanza. Sto usando questa soluzione mostrata, ma c'è una sola linea che è unica tra i miei due modelli e molti che sono la stessa identica. – Bryant

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

se necessario selezionare un elemento senza attributi

Problemi correlati