Best approach to this is XSLT 2.0
<xsl:for-each-group select="*" group-starting-with="skill">
<skill name="{.}">
<xsl:copy-of select="subsequence(current-group(), 2)"/>
</skill>
</xsl:for-each>
Having said that, I haven't worked out why your current code doesn't work.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Thomas Kielczewski [mailto:thomaskiel(_at_)yahoo(_dot_)com]
Sent: 28 June 2007 12:39
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] another hierarchical problem
Hi all,
Given the flat XML:
<root>
<skill>skill1</skill>
<procedure>procedure</procedure>
<note>note</note>
<supplies>supplies</supplies>
<cleanup>cleanup</cleanup>
<skill>skill2</skill>
...
</root>
I would like to structure this. I'm using the
generate-id/preceding-sibling method but unlike the example I
base this on, I would like to call ALL elements types to be
under it hierarchically (following-sibling::*). However, when
I try the following XSLT, <skill> begins nesting ad
infinitum, eventually maxing out the memory allocated to saxon-j.
Can anyone see anything wrong with this?
<xsl:output method="xml" indent="yes" /> <xsl:strip-space
elements="*"/>
<xsl:template match="skill">
<xsl:element name="{name()}">
<xsl:attribute name="id" select="text()"/>
<xsl:apply-templates
select="following-sibling::*[generate-id(preceding-sibling::skill[1])
= generate-id(current())]" />
</xsl:element>
</xsl:template>
<xsl:template match="*">
<xsl:copy-of select="." />
</xsl:template>
<xsl:template match="root">
<xsl:apply-templates select="skill" /> </xsl:template>
</xsl:stylesheet>
Perhaps another flat-to-hierarchical method is better suited?
What if I need to create multiple levels of nesting?
Could that be done in a single stylesheet? Once I solve my
first problem, I could easily do it in several passes. I also
toyed with the idea of building a structured "skeleton" of my
parent element <skill> into a template and then populating
it. Is that an accepted technique?
I appreciate any pointers,
Thomas Kiel
______________________________________________________________
______________________
Choose the right car based on your needs. Check out Yahoo!
Autos new Car Finder tool.
http://autos.yahoo.com/carfinder/
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--