这就是我在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.xml
和b.xml
在XML结构方面完全相同。
答案 0 :(得分:5)
<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)
”)