我有下面的模板xsl:apply-template
<xsl:apply-templates
select="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'PO')]" />
如上所示,它对"PO"很好,现在我也想为CPTY制作它,所以我已经开发了它。。
<xsl:apply-templates
select="fpml:dataDocument/fpml:trade/fpml:swap/fpml:swapStream/fpml:payerPartyReference[starts-with(@href, 'CPTY')]" />
但问题是,不可能有两个名称相同的seprate模板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>
你说得对,不能有两个模板具有完全相同的匹配模式,但你可以有
<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" />
并且让模板匹配器通过为每个目标节点选择合适的匹配模板来处理条件行为。