我有以下模板,即xsl:apply template
<xsl:apply-templates
select="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'PO')]" />
如上所示它适用于PO&#39;现在我想为CPTY制作它所以我已经开发了它如图所示..
<xsl:apply-templates
select="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'CPTY')]" />
但问题是,不能有两个名称相同的单独模板payerPartyReference你可以告诉我们处理这个问题的最佳方法是什么。
我在想的是......
<xsl:if test="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'PO')]">
</xsl:if>
<xsl:if test="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'CPTY')]">
</xsl:if>
答案 0 :(得分:2)
你是对的,你不能拥有两个具有完全相同匹配模式的模板,但你可以拥有
<xsl:template match="fpml:payerPartyReference[starts-with(@href, 'PO')]">
<!-- ... -->
</xsl:template>
<xsl:template match="fpml:payerPartyReference[starts-with(@href, 'CPTY')]">
<!-- ... -->
</xsl:template>
使用这些单独的模板,您可能会发现不需要拆分apply-templates
。根据问题的具体细节,您可能会发现只能做一个
<xsl:apply-templates
select="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference" />
让模板匹配器通过为每个目标节点选择适当的匹配模板来处理条件行为。