|
Subject: [xsl] Positional Grouping Problem From: Mukul Gandhi <gandhi.mukul@xxxxxxxxx> Date: Fri, 5 Aug 2005 16:55:23 +0530 |
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 -> |
|---|---|---|
| Re: [xsl] Measure the length of an , Mukul Gandhi | Thread | Re: [xsl] Positional Grouping Probl, George Cristian Bina |
| Re: [xsl] Measure the length of an , Mukul Gandhi | Date | RE: [xsl] Measure the length of an , Khorasani, Houman |
| Month |