2011-02-07 10 views

Odpowiedz

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

Prawidłowo, zakładając, że węzeł kontekstu jest ustawiony nad elementem nadrzędnym danego elementu. (Miałem skłonność do podejrzeń, że jeśli plakat ma trudności w tym obszarze, to nie zrozumiał jeszcze sposobu działania kontekstu w XSLT.) –

26

Wystarczy użyć:

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

Należy pamiętać: W dobrze napisany kod XSLT liczbę instrukcji warunkowych (takich jak <xsl:choose>, <xsl:when>, <xsl:otherwise>, <xsl:if> ... itp.) jest bliski zeru. W tym rozwiązaniu jest 0.

+1

+1 Lepsza odpowiedź. –

+1

Zgadzam się z +1 dla lepszej odpowiedzi –

+0

Gdyby istniało kilka wierszy tego samego zadania do wykonania, które pasują do "someElement", w jaki sposób można wdrożyć bez nadmiarowości. Używam tego rozwiązania pokazanego, ale istnieje tylko jedna linia, która jest unikalna między moimi dwoma szablonami i kilkoma, które są dokładnie takie same. – Bryant

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

razie potrzeby wybrać jakiś element bez atrybutu

Powiązane problemy