如何在XSL中区分两个模板?

时间:2011-05-24 21:09:01

标签: xml xslt

这就是我在XSL中尝试做的事情:

<xsl:apply-templates select="document('a.xml')//row"/>
<xsl:apply-templates select="document('b.xml')//row"/>

<xsl:template match="row">
  <!-- for document a.xml -->
</xsl:template>

<xsl:template match="row">
  <!-- for document b.xml -->
</xsl:template>

由于显而易见的原因,现在不能正常工作。如何区分这两个模板?文档a.xmlb.xml在XML结构方面完全相同。

2 个答案:

答案 0 :(得分:5)

使用mode attribute

<xsl:apply-templates select="document('a.xml')//row" mode="a"/>
<xsl:apply-templates select="document('b.xml')//row" mode="b"/>

<xsl:template match="row" mode="a">
  <!-- for document a.xml -->
</xsl:template>

<xsl:template match="row" mode="b">
  <!-- for document b.xml -->
</xsl:template>

答案 1 :(得分:4)

您可以按建议使用mode属性,但这确实意味着决定部分在xsl:apply-templates级别,部分由模板规则本身决定。如果您希望控件纯粹位于模板规则中,则可以使用匹配模式

row[(/) is document('a.xml')]
row[(/) is document('b.xml')]

(如果您仍在使用XSLT 1.0,请将“A is B”替换为“generate-id(A) = generate-id(B)”)