我正在修改一些XSL,这些XSL已经附带了一些相对于当前上下文节点输出数据的模板。我想用不同的上下文调用相同的模板,因此我不必通过传递其他参数来更改现有的模板。使用不同的上下文调用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。请注意,“上下文=”属性是无效的,但我把它放在那里来解释我的想法:
...
<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
嗨,你是通过尝试重用模板代码做正确的事情!一些意见: – kjm
我期望的第一个呼叫模板的工作。第二个将不起作用,但如果你谷歌的祖先轴,你应该找到答案的方式。请尝试这些更改,看看它是如何发生的。 – kjm
谢谢蒂姆。你的回答游戏是一个非常重要的线索,所以我最终为第二个模板调用添加了一个新模板(从父类中抽取数据的模板)。这个新模板充当包装模板来调用现有的模板。见下面的答案。 –