2011-02-07 4 views

ответ

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

Исправить, если предположить, что узел контекста расположен у родителя соответствующего элемента. (Я бы предположил, что если у плаката возникают трудности в этой области, то они еще не поняли, как контекст работает в XSLT.) –

26

Просто используйте:

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

Обратите внимание: В хорошо написанном коде XSLT количество условных инструкций (например, <xsl:choose>, <xsl:when>, <xsl:otherwise>, <xsl:if> ... и т. д.) близка к нулю. В этом решении он является 0.

+1

+1 Лучше ответ. –

+1

Согласен +1 для лучшего ответа –

+0

Если бы было несколько строк одной и той же работы, которая должна быть выполнена, что соответствует «someElement», как бы вы реализовали без избыточности. Я использую это решение, но есть только одна строка, которая уникальна между двумя моими шаблонами, а некоторые - то же самое. – Bryant

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

если нужно выбрать какой-то элемент без атрибута

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