gpt4 book ai didi

xslt - 循环 XSL 样式表中指定的硬编码值,而不是 XML

转载 作者:行者123 更新时间:2023-12-01 11:05:04 24 4
gpt4 key购买 nike

我想知道是否有一种方法可以遍历 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>电话,但这并没有比原来节省多少空间。

有没有什么简洁的方法可以用 XSL 做到这一点?我绝对不能将所有的复选框名称都放在 XML 输出中,这是一个很大的列表并且不必要地使 XML 膨胀。

最佳答案

是的,您可以通过调用 document('') 函数获取 XSL 的源 (!),然后您可以将其用作节点数据源。

<xsl:template name="boxNames"> <!-- not used as template -->
<name>foo</name>
<name>bar</name>
<name>baz</name>
</xsl:template>

[...]

<xsl:variable name="boxNames" select="document('')/xsl:stylesheet/xsl:template[@name='boxNames']/name" />

关于xslt - 循环 XSL 样式表中指定的硬编码值,而不是 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com