Subject: Re: [xsl] Positional Grouping Problem From: George Cristian Bina <george@xxxxxxx> Date: Fri, 05 Aug 2005 14:40:29 +0300 |
<xsl:template name="generate-group-elements"> <xsl:param name="list" />
<xsl:if test="$list[1]='HI'"> <xsl:copy-of select="$list[1]" /> <xsl:call-template name="generate-group-elements"> <xsl:with-param name="list" select="$list[position() > 1]" /> </xsl:call-template> </xsl:if> </xsl:template>
Best Regards, George --------------------------------------------------------------------- George Cristian Bina <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger http://www.oxygenxml.com
I have this XML file - <?xml version="1.0"?> <X> <Y> <Z>HI</Z> <Z>HI</Z> <Z>HI</Z> <Z>YES</Z> <Z>HI</Z> <Z>HI</Z> </Y> </X>
I desire output - <?xml version="1.0" encoding="utf-8"?> <X> <Y> <group> <Z>HI</Z> <Z>HI</Z> <Z>HI</Z> </group> <Z>YES</Z> <group> <Z>HI</Z> <Z>HI</Z> </group> </Y> </X>
i.e. all consecutive Z's with string HI should be grouped in element <group>
I have written this stylesheet so far to solve this problem -
<?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="/X"> <X>
<Y>
<xsl:apply-templates select="Y" /> </Y>
</X> </xsl:template>
<xsl:template match="Y">
<xsl:apply-templates select="Z" />
</xsl:template>
<xsl:template match="Z">
<xsl:choose>
<xsl:when test=". = 'YES'">
<xsl:copy-of select="." />
</xsl:when>
<xsl:when test="((. = 'HI') and not(preceding-sibling::Z[1] = 'HI'))">
<group>
<xsl:copy-of select="." />
<xsl:call-template name="generate-group-elements">
<xsl:with-param name="list" select="following-sibling::Z" />
</xsl:call-template>
</group>
</xsl:when>
</xsl:choose> </xsl:template>
<xsl:template name="generate-group-elements">
<xsl:param name="list" />
<xsl:if test="$list[1]">
<xsl:copy-of select="$list[1]" />
<xsl:call-template name="generate-group-elements">
<xsl:with-param name="list" select="$list[position() > 1]" />
</xsl:call-template>
</xsl:if> </xsl:template>
</xsl:stylesheet>
But I am getting output - <?xml version="1.0" encoding="utf-8"?> <X> <Y> <group> <Z>HI</Z> <Z>HI</Z> <Z>HI</Z> <Z>YES</Z> <Z>HI</Z> <Z>HI</Z> </group> <Z>YES</Z> <group> <Z>HI</Z> <Z>HI</Z> </group> </Y> </X>
Can somebody please find the bug in my stylesheet?
I have tested with Xalan-J 2.6.0, Saxon 6.5.3 and MSXML4 ; and I am getting same output with all these three XSLT processors. I am hinging slightly to Xalan and Saxon.
Regards, Mukul
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Positional Grouping Problem, Mukul Gandhi | Thread | Re: [xsl] Positional Grouping Probl, Mukul Gandhi |
Re: [xsl] Measure the length of an , George Cristian Bina | Date | Re: [xsl] Positional Grouping Probl, David Carlisle |
Month |