RE: [xsl] Performance with grouping

Subject: RE: [xsl] Performance with grouping
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Wed, 20 Mar 2002 09:32:57 -0000
The following should give the right result and adequate performance:

<xsl:variable name="first" select="/RESPONSES/RESPONSE[1]"/>

<xsl:template match="RESPONSES">
 <residents>
  <xsl:apply-templates/>
 </residents>
</xsl:template>

<xsl:template match="RESPONSE[1]"/>

<xsl:template match="RESPONSE">
  <resident>
  <xsl:for-each select="*">
    <xsl:element name="{$first/*[name()=name(current())]}">
      <xsl:value-of select="."/>
    </xsl:element>
  </xsl:for-each>
  </resident>
</xsl:template>

Not tested.

Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx 

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Maulik Modi
> Sent: 19 March 2002 22:13
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Performance with grouping
> 
> 
> Hi,
> 
> I have the following XML :
> 
> <RESPONSES>
> 	<RESPONSE>
> 		<C0><![CDATA[Res_ID]]></C0>
> 		<C1><![CDATA[Res_Type]]></C1>
> 		<C2><![CDATA[Error]]></C2>
> 	</RESPONSE>
> 	<RESPONSE>
> 		<C0><![CDATA[15760412_105755]]></C0>
> 		<C1><![CDATA[SF-IND]]></C1>
> 		<C2><![CDATA[Unverifiable Service Address]]></C2>
> 	</RESPONSE>
> 	<RESPONSE>
> 		<C0><![CDATA[15930044_106686]]></C0>
> 	</RESPONSE>
> 	<RESPONSE>
> 		<C0><![CDATA[15600408_106431]]></C0>
> 		<C1><![CDATA[SF-IND]]></C1>
> 	</RESPONSE>
> </RESPONSES>
> 
> The actual XML could have several children like C0, C1, 
> C2.......Cn and also
> several RESPONSE tags. I need to dynamically extract the 
> tagname from always
> the first <RESPONSE> node and then do further processing to group each
> node-set into a <resident> tag like:
> 
> <residents>
> 	<resident>
> 		<Res_ID>15760412_105755</Res_ID>
> 		<Res_Type>SF-IND</Res_Type>
> 		<Error>Unverifiable Service Address</Error>
> 	</resident>
> 	<resident>
> 		<Res_ID>15930044_106686</Res_ID>
> 		<Res_Type>SF-IND</Res_Type>
> 	</resident>
> 	<resident>
> 		<Res_ID>15600408_106431</Res_ID>
> 		<Res_Type>SF-IND</Res_Type>
> 	</resident>
> </residents>
> 
> However, what I have working so far is this:
> 
> <residents>
> 	<resident>
> 		<Res_ID>15760412_105755</Res_ID>
> 		<Res_ID>15930044_106686</Res_ID>
> 		<Res_ID>15600408_106431</Res_ID>
> 	</resident>
> 	<resident>
> 		<Res_Type>SF-IND</Res_Type>
> 		<Res_Type>SF-IND</Res_Type>
> 	</resident>
> 	<resident>
> 		<Error>Unverifiable Service Address</Error>
> 	</resident>
> </residents>
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread