我正在修改一些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
謝謝蒂姆。你的回答遊戲是一個非常重要的線索,所以我最終爲第二個模板調用添加了一個新模板(從父類中抽取數據的模板)。這個新模板充當包裝模板來調用現有的模板。見下面的答案。 –