[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: xsl grouping problem
You could try this XSLT 1.0 solution(though this is tested with Saxon 8.4). <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" /> <xsl:template match="/chapter"> <chapter> <xsl:for-each select="*"> <xsl:choose> <xsl:when test="self::para"> <xsl:copy-of select="." /> </xsl:when> <xsl:when test="self::line_first"> <stanza> <xsl:call-template name="makegroup"> <xsl:with-param name="nodeset" select="self::line_first | following-sibling::*" /> </xsl:call-template> </stanza> </xsl:when> </xsl:choose> </xsl:for-each> </chapter> </xsl:template> <xsl:template name="makegroup"> <xsl:param name="nodeset" /> <xsl:choose> <xsl:when test="$nodeset[1]/self::line_last"> <xsl:copy-of select="$nodeset[1]" /> </xsl:when> <xsl:otherwise> <xsl:copy-of select="$nodeset[1]" /> <xsl:call-template name="makegroup"> <xsl:with-param name="nodeset" select="$nodeset[position() > 1]" /> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> Regards, Mukul On 9/9/05, Jeff Hatch <hatchjk@xxxxxxxxxxxxx> wrote: > I've been chewing on this for some time now and would love some suggestions. > Coming from a document-centric environment, I am given xml that looks like this: > > <chapter> > <para>This is a paragraph in the chapter</para> > <line_first>This is first line of a stanza of poetry</line_first> > <line>This is line of poetry</line> > <line>This is line of poetry</line> > <line>This is line of poetry</line> > <line_last>This is last line of a stanza of poetry</line_last> > <para>This is a paragraph in the chapter</para> > </chapter> > > The challenge is to perform copy and grouping operations to a) copy all existing > structure as is, using copy-of, which is not a problem. However, to the above > xml I wish to apply additional structure to create a poem stanza: > > <chapter> > <para>This is a paragraph in the chapter</para> > <stanza> > <line_first>This is first line of poetry</line_first> > <line>This is line of poetry</line> > <line>This is line of poetry</line> > <line>This is line of poetry</line> > <line_last>This is last line of poetry</line_last> > </stanza> > <para>This is a paragraph in the chapter</para> > </chapter> > > My difficulty stems from being dealt two dissimilar element names at the > beginning and end of the block of xml that needs to be grouped. My attempts to > do this with group-starting-with and group-ending-with have failed. Performing > group-adjacent on the <line> elements miss the first_ and last_line elements. > Any thoughts?
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|