|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Numbering new nodes using consecutive integers
At 2009-03-27 17:40 +0100, Michael Ludwig wrote:
I added an additional level <G2> to a hierarchy of <Groups> and <G1>. I want to assign numbers to the newly created <G2> nodes, which identify them in the document. I managed to do so using <xsl:number>.
Now it would be perfect if the numbering was done as a strict sequence of consecutive integers, meaning 1,2,3 instead of, say, 1,3,5.
I'll have to wait to find more time to do this in XSLT 1 as it isn't nearly as easy as it is in XSLT 2. I hope this helps. . . . . . . . . . . . Ken T:\ftemp>type michael.xml <?xml version="1.0" encoding="iso-8859-1"?> <Groups> <G1> <M>eins</M> <M>zwei</M> <M>drei</M> <M>vier</M> <M>f|nf</M> <M>sechs</M> <M>sieben</M> </G1> <G1> <M>acht</M> <M>neun</M> <M>zehn</M> <M>elf</M> <M>zwvlf</M> </G1> <G1> <M>eins</M> <M>zwei</M> <M>drei</M> <M>vier</M> <M>f|nf</M> <M>sechs</M> <M>sieben</M> </G1> <G1> <M>acht</M> <M>neun</M> <M>zehn</M> <M>elf</M> <M>zwvlf</M> </G1> </Groups> T:\ftemp>call xslt2 michael.xml michael.xsl <?xml version="1.0" encoding="iso-8859-1"?> <Groups> <G1> <G2 no="1"> <M>eins</M> <M>zwei</M> </G2> <G2 no="2"> <M>drei</M> <M>vier</M> </G2> <G2 no="3"> <M>f|nf</M> <M>sechs</M> </G2> <G2 no="4"> <M>sieben</M> </G2> </G1> <G1> <G2 no="5"> <M>acht</M> <M>neun</M> </G2> <G2 no="6"> <M>zehn</M> <M>elf</M> </G2> <G2 no="7"> <M>zwvlf</M> </G2> </G1> <G1> <G2 no="8"> <M>eins</M> <M>zwei</M> </G2> <G2 no="9"> <M>drei</M> <M>vier</M> </G2> <G2 no="10"> <M>f|nf</M> <M>sechs</M> </G2> <G2 no="11"> <M>sieben</M> </G2> </G1> <G1> <G2 no="12"> <M>acht</M> <M>neun</M> </G2> <G2 no="13"> <M>zehn</M> <M>elf</M> </G2> <G2 no="14"> <M>zwvlf</M> </G2> </G1> </Groups> T:\ftemp>type michael.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" encoding="iso-8859-1"/> <xsl:variable name="M-per-G2" select="2"/> <xsl:template match="G1">
<xsl:copy>
<xsl:for-each-group select="M"
group-by="(position()-1) idiv $M-per-G2">
<G2>
<xsl:attribute name="no"
select="position() (:within this group:) +
(:count of subgroups within previous groups:)
sum( for $g1 in ../preceding-sibling::G1
return
((count($g1/M)-1) idiv $M-per-G2 + 1)
)"/>
<xsl:copy-of select="current-group()"/>
</G2>
</xsl:for-each-group>
</xsl:copy>
</xsl:template><xsl:template match="@*|node()"><!--identity for all other nodes-->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template></xsl:stylesheet> T:\ftemp>rem Done! -- XSLT/XSL-FO/XQuery training in Los Angeles (New dates!) 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
|
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
|






