问题描述
|
这就是我要在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)
\”)