|
[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
|

Cart








