RE: [xsl] copy single node once from one location to another

Subject: RE: [xsl] copy single node once from one location to another
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Mon, 9 Sep 2002 09:23:21 +0100
<xsl:variable name="data-nr" select="/mydoc/specials/data_nr"/>

<xsl:template match="a">
  <a>
  <xsl:copy-of select="@*"/>
  <xsl:copy-of select="node()"/>
  <xsl:if test="count(preceding-sibling::a)+1 = $data-text">
    <xsl:copy-of select="$data_nr/../data-text"/>
  </xsl:if>
</xsl:template>

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 
> Thomas Olausson
> Sent: 06 September 2002 22:46
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] copy single node once from one location to another
> 
> 
> My XML file is being fed to an external system, which I don't 
> have control of. 
> It adds a "specials"-tag at the end like this: (hardcoded)
> 
> <mydoc>
> 	<a id="ABC">
> 		<data>100</data>
> 		<data>101</data>
> 	</a>
> 	<a id="DEF">
> 		<data>200</data>
> 		<data>201</data>
> 	</a>
> 	<specials>
> 		<data_nr>2</data_nr>
> 		<data_text>300</data_text>
> 	</specials>
> </mydoc>
> 
> I'd like to write a XSLT that moves the data_text to the 
> corresponding index of "a", expressed in data_nr. In the 
> above case, /mydoc/a[2]
> 
> In the above example, I'd like the output to be
> 
> <mydoc>
> 	<a id="ABC">
> 		<data>100</data>
> 		<data>101</data>
> 	</a>
> 	<a id="DEF">
> 		<data>200</data>
> 		<data>201</data>
> 		<data>300</data>
> 	</a>
> 	<specials>
> 		<data_nr>2</data_nr>
> 		<data_text>300</data_text>
> 	</specials>
> </mydoc>
> I just copied the 300-data to the 2nd 'a', because data_nr was 2.
> 
> I know which fields to copy from, and I don't need any error 
> checking (in case there are only one a , but data_nr=2 would 
> never happen)
> 
> I can't change the external system, and in XSLT, I haven't 
> figured out to copy the line once. My XSLTs copies them one 
> for every data item, even if I match correctly.
> 
> /Thomas
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


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


Current Thread