Шаг math()
был только введен в 3.3.1, поэтому если вы используете 3.2.10, это не сработает. Возможно, попробуйте 3.3.5 и посмотрите, работает ли math()
там.
Одно решение, для которого не нужен xxx:node-набор () расширение, следующее:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<!-- -->
<xsl:variable name ="myVar">
<RefData RefTag="test1" bbb="false" />
<RefData RefTag="test2" bbb="false" />
<RefData RefTag="test3" bbb="false" />
<RefData RefTag="test4" bbb="true" />
<RefData RefTag="test5" bbb="false" />
<RefData RefTag="test6" bbb="false" />
</xsl:variable>
<!-- -->
<xsl:variable name="vrefVar" select=
"document('')/*/xsl:variable[@name='myVar']"
/>
<!-- -->
<xsl:template match="/">
<xsl:value-of select="$vrefVar/*[@RefTag='test3']/@bbb"/>
</xsl:template>
</xsl:stylesheet>
Когда вышеупомянутое преобразование применяется на любой XML-документ (не используемый), к требуемому результату приводят:
false
Действительно отметьте использование XSLT document()
функционируйте для доступа к необходимому <xsl:variable>
просто как элемент в xml документе.
<xsl:variable name="myVariable" select="msxsl:node-set($myVar)"/>
Можно избежать msxsl пространства имен движущимся переменным содержанием к источнику xml.
Принятие этого XML:
<test1>
<RefData RefTag="test1"/>
<RefData RefTag="test2"/>
<RefData RefTag="test3"/>
<RefData RefTag="test4"/>
<RefData RefTag="test5"/>
<RefData RefTag="test6"/>
</test1>
Что-то вроде этого могло работать:
<xsl:template match="/">
<xsl:apply-templates select="test1/RefData"/>
</xsl:template>
<xsl:template match="RefData">
<xsl:variable name="myVar">
<xsl:choose>
<xsl:when test="@RefTag = 'test1'">false</xsl:when>
<xsl:when test="@RefTag = 'test2'">false</xsl:when>
<xsl:when test="@RefTag = 'test3'">false</xsl:when>
<xsl:when test="@RefTag = 'test4'">true</xsl:when>
<xsl:when test="@RefTag = 'test5'">false</xsl:when>
<xsl:when test="@RefTag = 'test6'">false</xsl:when>
<xsl:otherwise>true</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!--<text x="{$myVar}"/>-->
</xsl:template>