【发布时间】:2015-10-15 16:13:00
【问题描述】:
我正在修改一个 XSL,它已经带有一些模板输出与当前上下文节点相关的数据。我想用不同的上下文调用相同的模板,这样我就不必通过传递额外的参数来更改现有的模板。
例如 XML:
<anyRoot>
<level1>
<a>xxxxxx</a>
<b>yyyyyy</b>
<level2>
<a>aaaaa</a>
<b>bbbbbb</b>
<c>cccccc</c>
<d>dddddd</d>
</level2>
</level1>
<level1>
<a>zzzzzz</a>
<b>jjjjjj</b>
<level2>
<a>nnnnn</a>
<b>bbbbbb</b>
<c>cccccc</c>
<d>dddddd</d>
</level2>
</level1>
</anyRoot>
理论 XSL。请注意,“context=”属性无效,但我把它放在那里是为了解释我的想法:
...
<xsl:for-each select="/anyRoot/level1/level2">
<xsl:call-template name="testTmplate"/>
<xsl:call-template name="testTmplate" context=".."/> <!-- passing parent of level2-->
</xsl:for-each>
...
<xsl:template name="testTmplate">
<xsl:value-of select="./a"/>
</xsl:template>
这是我希望看到的输出:
aaaaa
xxxxxxx
nnnnnnn
zzzzzzz
【问题讨论】:
-
您好,您尝试重用模板代码是对的!一些cmets:
-
我希望第一个调用模板能够工作。第二个不起作用,但如果你用谷歌搜索祖先轴,你应该找到答案的方式。请尝试这些更改,看看效果如何。
-
谢谢蒂姆。您的答案游戏是一个非常重要的线索,所以我最终为第二个模板调用(从父级提取数据的那个)添加了一个新模板。这个新模板充当包装模板来调用现有模板。请参阅下面的答案。