Ответ 1
Вот очень простой способ сделать условную обработку, используя полную силу соответствия шаблону 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
Можно настроить это решение и поместить любой код в первый шаблон и, если необходимо, во второй шаблон.