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

问题描述

| 这就是我要在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>
由于明显的原因,它不能像现在那样工作。如何区分这两个模板? ѭ1和
b.xml
在XML结构方面绝对相同。     

解决方法

使用
mode
属性。
<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>
    ,您可以按照建议的方式使用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)
\”)