Re: [xsl] Recursive wrapping

Subject: Re: [xsl] Recursive wrapping
From: George Cristian Bina <george@xxxxxxxxxxxxx>
Date: Thu, 13 Jul 2006 18:49:30 +0300
Something like below perhaps?

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Attribute">
<OtherAttributes>
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::*[1][self::Attribute]" mode="att"/>
</OtherAttributes>
</xsl:template>
<xsl:template match="Attribute[preceding-sibling::*[1][self::Attribute]]"/>


<xsl:template match="Attribute" mode="att">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::*[1][self::Attribute]" mode="att"/>
</xsl:template>


  <xsl:template match="node() | @*" mode="att">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com


Khorasani, Houman wrote:
Hi,

I have a problem, which should be quite straight forward but I can't
find the solution.


XML:


<a>1</a>
<b>2</b>
<Attribute>
	<Name>xx</Name>
	<Value>xx</Value>
</Attribute>
<Attribute>
	<Name>yy </Name>
	<Value>yy</Value>
</Attribute>
...
<c>3</c>



Would like to generate:
<a>1</a>
<b>2</b>
<OtherAttributes>
	<Attribute>
		<Name>xx</Name>
		<Value>xx</Value>
	</Attribute>
	<Attribute>
		<Name>yy </Name>
		<Value>yy</Value>	
	</Attribute>
	...
</OtherAttributes>
<c>3</c>

There could be 0 to n attribute elements and I would like to wrap them
between an OtherAttributes.

I have tried to solve it by recursive templates, but somehow I don't get
there.  Any suggestions?

Many thanks
Houman

Current Thread