Мне интересно, есть ли способ зацикливания значений , указанных в XSL , вместо того, чтобы исходить из XML.
Допустим, у меня есть 3 возможных флажка с«текущее» значение, которое приходит из XML.Я хотел бы иметь XML-документ, такой как
<rootNode>
<val>bar</val>
</rootNode>
и XSL-код, такой как
<input id="foo" type="checkbox" name="myvar" value="foo">
<xsl:if test="val='foo'">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
</input> <label for="foo">foo</label>
<input id="bar" type="checkbox" name="myvar" value="bar">
<xsl:if test="val='bar'">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
</input> <label for="bar">bar</label>
<input id="baz" type="checkbox" name="myvar" value="baz">
<xsl:if test="val='baz'">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
</input> <label for="baz">baz</label>
. Это работает, но XSL очень многословен.Я хотел бы иметь возможность сделать что-то вроде этого:
<!-- this syntax doesn't work, is there something similar that does? -->
<xsl:variable name="boxNames" select="'foo','bar','baz'"/>
<xsl:for-each select="name in $boxNames">
<input id="{$name}" type="checkbox" name="myvar" value="{$name}">
<xsl:if test="val=$name">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
</input> <label for="{$name}"><xsl:value-of select="$name"/></label>
</xsl:for-each>
Я могу получить это, поместив код в шаблон и используя несколько вызовов <call-template>
<with-param>
, но это не такt сэкономить много места по сравнению с оригиналом.
Есть ли какой-нибудь краткий способ сделать это с помощью XSL?Я определенно не могу поместить все имена флажков в выводе XML, это большой список и излишне раздувает XML.