在我的阅读中,很明显XSLT 1.0中对for i .. m
循环的唯一理智解决方法是使用递归模板。XSLT循环或替代节点复制
除非有人能够解释,否则,进一步看来,鉴于XSLT处理的限制,这种方法通常不是可重用的。
无论如何,给出的输入代码段(在这种情况下上下文节点):
<items count="3">
<item>
<name>Name</name>
<description>Description</description>
</item>
</items>
是否有重复基础上count
属性<item>
孩子一个可重复使用的策略是什么?这里的预期产出将仅仅是
<item>
<name>Name</name>
<description>Description</description>
</item>
<item>
<name>Name</name>
<description>Description</description>
</item>
<item>
<name>Name</name>
<description>Description</description>
</item>
我打算在<item>
节点上执行进一步的转变,但我不认为他们是相关的。
可重用性是我关心的一个问题,原因很简单,因为count
属性在输入文档的元素中非常常见,而语义意图就如上面我的示例所述。如果我要使用递归迭代器的方法,我不得不将它烘焙到每个模板中(,这将非常干;更像是非常湿,如“为什么甚至尝试”;但我离题了)
如果有是一项战略,以创建一个通用模板for
,与任何变换操作都不能进行,那将只是壮观。如果我不使用任何递归迭代器就可以逃脱,如果为此目的使用的某个函数被放在XSLT 1.0中,那也同样壮观。
无论如何,我该如何做到这一点?我是否需要诉诸WET方法,还是有更好的方法?
您可以通过将'select'换行到'current()[$ count> 1]''后消除'xsl:if'。当前的方法还有一个可能的缺点,那就是它将复制包含节点的单个元素而不是整个内容。例如'' 会导致' ',而不是' '。您可以通过将第二个模板的第一行修改为'select =“。”',并从第三个模板的第二行中删除“select”来更改此选项。 –
JLRishe
2013-04-23 20:39:33
好用于两个版本的循环编码+1。 – 2014-12-20 06:05:45