XMLから来るのではなく、XSLに指定された値をループする方法があるのだろうかと思います。XMLではなく、XSLスタイルシートで指定されたハードコードされた値をループする
私は3つのチェックボックスがあり、XMLからの "現在の"値を持っているとします。私は、これは動作しますが、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>
よう
<rootNode>
<val>bar</val>
</rootNode>
とXSLコードのようなXMLドキュメントを持っていると思います。私はこのような何かを行うことができるようにしたい:私は種類のテンプレートにコードを置くと、複数に<call-template>
<with-param>
呼び出しを使用してこれを取得することができます
<!-- 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>
が、それはだ上で多くのスペースを節約しません。元の。
XSLでこれを行うための簡潔な方法はありますか?私は間違いなく、すべてのチェックボックス名をXML出力に入れることはできません。大きなリストであり、XMLを不必要に膨らませます。
未使用のテンプレートにデータを入れるのではなく、XSLT名前空間以外の名前空間を使用する場合は、最上位の要素として配置できます。 XSLTプロセッサは、そのようなトップレベルの要素を無視します。 –
パーフェクト、これはまさに私が望んでいたものです!私はJukkaに同意します。別の名前空間を使用して実際にテンプレートではないことを強調します。 –