On 21/12/2010 12:30, Matthieu Ricaud-Dussarget wrote:
Hi all,
This is a grouping question one more time.
It's not actually a grouping problem as commonly understood.
For such an input :
<p foo="foo_att" bar="bar_att" foobar="foobar_att">my text</p>
I'd like such an output :
<p>
<foo><bar><foobar>my text</foobar></bar></foo>
</p>
the order foo/bar/foobar isn't important here.
<foobar><bar><foo>my text</foo></bar></foobar> would also be ok.
This should work for any number of attributes (including none)
You need to process the attributes one at a time, recursively:
<xsl:template match="p[(_at_)*]">
<xsl:variable name="temp">
<p>
<xsl:copy-of select="remove(@*, 1)"/>
<xsl:element name="{name(@*[1])}">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</p>
</xsl:variable>
<xsl:apply-templates select="$temp"/>
</xsl:template>
<xsl:template match="p[not(@*)]">
<xsl:sequence select="."/>
</xsl:template>
Michael Kay
Saxonica
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--