Re: transforming one specific subtree only

Subject: Re: transforming one specific subtree only
From: Mike Brown <mike@xxxxxxxx>
Date: Tue, 7 Nov 2000 14:35:58 -0700 (MST)
Jakob wrote:
> I have a document of type
> <a>
> 	<b ID="b1">...</b1>	
> 	<b ID="b2">...</b1>	
> 	<b ID="b3">...</b1>	
> 	<b ID="b4">...</b1>	
> </a>

I assume you mean </b>, not </b1>

> In my stylesheet I have a global param $nodeId defined which gets assigned an 
> ID from an argument sent to the processor, such as "b2".

How global parameters are assigned by the processor is processor
dependent. I will assume that $nodeId is an object of type string.

> I would like to only transform the subtree whose root has the ID stored in 
> $nodeId, and ignore, ie. not produce any output at all for all other elements.  
> If no matching ID is found, some boilerplate text should be produced instead.

<xsl:param name="nodeId"/>
<xsl:template match="/">
  <!-- go process 'b' elements with matching IDs -->
  <xsl:apply-templates select="/a/b[@ID=$nodeId]"/>
  <!-- if there are no such elements, say so -->
  <xsl:if test="not(/a/b[@ID=$nodeId])">
    <xsl:variable name="quot">'</xsl:variable>
    <xsl:value-of select="concat('ID ',$quot,$nodeId,$quot,' not found.')"/>

<xsl:template match="b">
  ... things to do for any 'b' element ...

   - Mike
Mike J. Brown, software engineer at         My XML/XSL resources: in Denver, Colorado, USA 

 XSL-List info and archive:

Current Thread