Вот очень простой способ выполнить условную обработку с использованием полной мощности сопоставления с шаблоном XSLT и исключительно стиля «push», и это даже избавляет от необходимости использовать условные инструкции, такие как <xsl:if>
или<xsl:choose>
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/root/diagram[graph[1]/@color]">
Graph[1] has color
</xsl:template>
<xsl:template match="/root/diagram[not(graph[1]/@color)]">
Graph[1] has not color
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к следующему документу XML :
<root>
<diagram>
<graph color= "#ff00ff">
<xaxis>1 2 3 12 312 3123 1231 23 </xaxis>
<yaxis>1 2 3 12 312 3123 1231 23 </yaxis>
</graph>
<graph>
<xaxis>101 102 103 1012 10312 103123 101231 1023 </xaxis>
<yaxis>101 102 103 1012 10312 103123 101231 1023 </yaxis>
</graph>
</diagram>
</root>
желаемый, правильный результат получается :
Graph[1] has color
когда то же преобразование применяется к этому XML-документу :
<root>
<diagram>
<graph>
<xaxis>101 102 103 1012 10312 103123 101231 1023 </xaxis>
<yaxis>101 102 103 1012 10312 103123 101231 1023 </yaxis>
</graph>
<graph color= "#ff00ff">
<xaxis>1 2 3 12 312 3123 1231 23 </xaxis>
<yaxis>1 2 3 12 312 3123 1231 23 </yaxis>
</graph>
</diagram>
</root>
снова получается требуемый и правильный результат :
Graph[1] has not color
Можно настроить это решение и поместить любой необходимый код в первый шаблон и, если необходимо, во второй шаблон.