RE: [xsl] Rename element

Subject: RE: [xsl] Rename element
From: "Shailesh Shinde" <shailesh@xxxxxxxxxxxx>
Date: Fri, 4 Nov 2005 19:20:46 +0530
Hi,

I am not getting the script to scriptin.

My input xml is:

<sample xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:noNamespaceSchemaLocation="test.xsd">
<sample1>
<p>ABCDEFGHIJK</p>
<script lang="enu"/>
<script lang ="enu1"/>
<p>123456</p>
<p>789123</p>
</sample1>
</sample>

Required output as:
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:noNamespaceSchemaLocation="test.xsd">
<sample1>
<p>ABCDEFGHIJK</p>
<scriptin lang="enu"/>
<scriptin lang ="enu1"/>
<p>123456</p>
<p>789123</p>
</sample1>
</test>

And the xsl for the same is:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
	<xsl:output method="xml" indent="yes" encoding="UTF-8"
omit-xml-declaration="no"/>
	<xsl:variable name="alink" select="//alink"/>
	<xsl:template match="/">
		<test>
			<!-- to get path value as filename path-->
			<xsl:attribute name="path">
				<xsl:value-of select="$alink"/>
					<xsl:text>.htm</xsl:text>
			</xsl:attribute>
								
			<xsl:attribute
name="xsi:noNamespaceSchemaLocation"><xsl:text>test.xsd</xsl:text></xsl:attr
ibute>
				<xsl:apply-templates/>
	</fileloc>
		</xsl:template>

	<!-- to change "script" to "scriptin"-->	
<xsl:template match="*[not(self::script)]">
<xsl:copy>
    <xsl:copy-of select="@*"/>
  </xsl:copy>
		<xsl:apply-templates/>
</xsl:template>

<xsl:template match="sample1">
	<xsl:copy-of select="."/>
	</xsl:template>
	</xsl:stylesheet>

Here I am not getting script to scriptin, rest of the content i am getting
as it required.


Thanks,
Shailesh

-----Original Message-----
From: Ragulf Pickaxe [mailto:ragulf.pickaxe@xxxxxxxxx] 
Sent: Friday, November 04, 2005 6:53 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Rename element

Hmmmmm. I can see from another thread, DC provided you with a solution
for the same input. Note that my solution will not work, if you do
these together, at DC's solution simply makes a deep copy of the XML
in question.

You will need something like (use it together with the template I
provided in the last email):

<xsl:template match="sample">
<test>
  <!--<xsl:copy-of select="@*|node()"/>-->
  <xsl:apply-templates/>
</test>
</xsl:template>

<xsl:template match="*[not(self::script)]"/>
  <!-- Makes a shallow copy of the element in question -->
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/> <!-- Applies templates to below elements -->
  </xsl:copy>
</xsl:template>

Regards,
Ragulf Pickaxe :-)

Current Thread