[Home] [By Thread] [By Date] [Recent Entries]
At 2009-04-22 10:36 +0530, M Balaji wrote:
I need to group the input. Are the above two lines supposed to be inverted? I'm assuming not.
The following is not the output I get with your stylesheet.
The first step is to get the intermediate results above, which is done with the following changes to your stylesheet: <?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"><xsl:output indent="yes"/> <xsl:template match="root"> <msgs> <xsl:for-each-group select="*" group-starting-with="*[starts-with(name(), 'num')]"> <msg> <xsl:apply-templates select="." mode="msg"/> <xsl:for-each-group select="current-group() except ." group-ending-with="test[last()]"> <import> <xsl:apply-templates select="current-group()" mode="msg"/> </import> </xsl:for-each-group> </msg> </xsl:for-each-group> </msgs> </xsl:template> <xsl:template match="@*|node()" mode="msg">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template></xsl:stylesheet> ... and then it can be seen how to fix the problem. To fix the problem you need only wrap an <import> group when there is a <test> element inside, otherwise put out the group without the wrapper. I hope the example below helps. . . . . . . . . . . . Ken
T:\ftemp>call xslt2 balaji.xml balaji.xsl
<?xml version="1.0" encoding="UTF-8"?>
<msgs>
<msg>
<num>This chapter is..:</num>
<import>
<test>A class is a module of Java code:</test>
<section>or</section>
<title>Java 5.0</title>
<test>The Java programming language</test>
</import>
<p>Write Once, Run Anywhere.</p>
</msg>
<msg>
<num>Java j2ee</num>
<p>Broad Responsibilities:...</p>
</msg>
<msg>
<num>Job Description Perform Oracle...</num>
</msg>
</msgs>
T:\ftemp>type balaji.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"><xsl:output indent="yes"/> <xsl:template match="root">
<msgs>
<xsl:for-each-group select="*"
group-starting-with="*[starts-with(name(), 'num')]">
<msg>
<xsl:apply-templates select="." mode="msg"/>
<xsl:for-each-group select="current-group() except ."
group-ending-with="test[last()]">
<xsl:choose>
<xsl:when test="current-group()/self::test">
<import>
<xsl:apply-templates select="current-group()"
mode="msg"/>
</import>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"
mode="msg"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</msg>
</xsl:for-each-group>
</msgs>
</xsl:template><xsl:template match="@*|node()" mode="msg">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template></xsl:stylesheet> T:\ftemp>rem Done! -- XSLT/XSL-FO/XQuery hands-on training - Los Angeles, USA 2009-06-08 Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18 Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18 G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc Legal business disclaimers: http://www.CraneSoftwrights.com/legal
|

Cart



