RE: [xsl] Error template trumping other templates on import?

Subject: RE: [xsl] Error template trumping other templates on import?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 27 Aug 2007 21:34:37 +0100
Template rules in an included module have higher precedence than templates
in an imported module, so if a node matches both, the rule in the included
module will win.

Michael Kay
http://www.saxonica.com/
 

> -----Original Message-----
> From: Steve [mailto:subsume@xxxxxxxxx] 
> Sent: 27 August 2007 20:22
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Error template trumping other templates on import?
> 
> Hello there,
> 
> I've got master.xsl which is imported by local.xsl. local.xsl 
> also includes global.xsl. global.xsl, which contains an 
> error-matching template in order to alert me in the case of 
> ambiguous/non-matches. I know several of you use a similar 
> template to catch template match problems.
> 
> My problem is that when included into local.xsl, the error 
> template takes over all matches. However, when the templates 
> from master.xsl are placed into local.xsl, all is fine. Also, 
> when the error template is removed entirely, everything 
> matches as expected.
> 
> Is the error matching template causing all templates in 
> master.xsl not to be imported?
> 
> local.xsl---------------
> 
> <?xml version='1.0' encoding="UTF-8"?>
> <xsl:stylesheet version='1.0' 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 	<xsl:import href="../../../master/Consumers/xsl/global.xsl" />
> 	<xsl:include href="../../Global/xsl/templates.xsl" />
> 
> 	<xsl:variable name="XML" 
> select="document('../XML.xml')/node()" />
> 
> 	<xsl:param name="consumerID" />
> 	<xsl:param name="Mode" />
> </xsl:stylesheet>
> 
> master.xsl------------
> 
> <?xml version='1.0' encoding="UTF-8"?>
> <xsl:stylesheet version='1.0' 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 	<xsl:template name="master" match="/">
> 		<xsl:choose>
> 			<xsl:when test="$R/id and $R/firstName">
> 				<xsl:apply-templates mode="nav" 
> select="$R" />
> 			</xsl:when>
> 			<xsl:when test="$consumerID!=''">
> 				<xsl:apply-templates mode="nav"
> select="document(concat($getXML,'fields=id,firstName,lastName,
> MI,consumerID&amp;table=Consumer_Inv&amp;key=id&amp;val=',$con
> sumerID))/Records/Record"
> />
> 			</xsl:when>
> 		</xsl:choose>
> 		<xsl:call-template name="warning" />
> 		<xsl:apply-templates />
> 		<xsl:call-template name="warning" />
> 	</xsl:template>
> 	<xsl:template mode="nav" match="node()" >
> 		<fieldset id="navigation" class="oneCol">
> 			<div>
> 				<span id="consumerInfo">
> 					<xsl:value-of 
> select="firstName" />&#32;
> 					<xsl:value-of 
> select="MI" />&#32;
> 					<xsl:value-of 
> select="lastName" /> &#32;<br />
> 					&#35;<xsl:value-of 
> select="consumerID" />
> 				</span>
>                          </div>
>                 </fieldset>
>           </xsl:template>
> </xsl:stylesheet>
> 
> global.xsl ------
> <xsl:stylesheet version='1.0' 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>         <xsl:template match="*">
> 	        Error matching template
>         </xsl:template>
> </xsl:stylesheet>

Current Thread