Вопрос чисто про xsl... Ну вобщем дело такое. Есть примерно вот такой xml:
Код:
<?xml version="1.0" encoding="windows-1251"?>
<data>
<bill>
<pos quantity="1" />
<pos quantity="2" />
<pos mid="1" />
<pos mid="2" />
</bill>
</data>
К нему есть вот такой xsl:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
version="1.0">
<xsl:output encoding="UTF-8" method='xml' />
<xsl:template match="bill">
<fo:table>
<fo:table-body>
<xsl:for-each select="pos">
<xsl:if test="1=1">
<xsl:variable name="pts" select="number(10)" />
</xsl:if>
<xsl:if test="1!=1">
<xsl:variable name="pts" select="number(20)" />
</xsl:if>
<fo:table-row>
<fo:table-cell ><fo:block ><xsl:value-of select="$pts"/></fo:block></fo:table-cell>
<fo:table-cell >
<fo:block >
<xsl:if test="@quantity"><xsl:value-of select="@quantity"/></xsl:if>
<xsl:if test="not(@quantity)"> 1 </xsl:if>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</xsl:template>
</xsl:stylesheet>
Так вот прямо вот в таком виде этот xsl не работает. Ошибка -- "Переменная или параметр "pts" не определена".
Если вместо условий нарисовать простое присваивание, то всё работает. А вот именно в таком виде - нет.
Причём чуть ниже xsl:if прекрасно реализует значение quantity "по умолчанию". То есть работает на "ура".
Но не могут же быть одновременно ложными оба условия "1=1" и "1!=1"....
