|
Subject: Re: [xsl] Numbering new nodes using consecutive integers From: Michael Ludwig <mlu@xxxxxxxxxxxxx> Date: Fri, 27 Mar 2009 18:53:32 +0100 |
you don't need xsl:number here as you're doing all the grouping by
hand so the number you want is I think
<xsl:attribute name="no">
<xsl:value-of select="position()+ ceiling(count(../preceding-sibling::G1/M) div $M-per-G2) "/>
</xsl:attribute>
Thanks. However, this doesn't guarantee unique numbers. By increasing M-per-G2 to 12 and adding some <G1> elements:
...
<M>zwvlf</M>
</G1>
<G1><!-- new groups from here -->
<M>usw</M>
</G1>
<G1>
<M>usw</M>
</G1>
<G1>
<M>usw</M>
</G1><!-- three new groups -->
</Groups> <xsl:template match="M" mode="group">
<G2><!-- I want this GR to be numbered sequentially. -->
<xsl:attribute name="no">
<xsl:number level="any"/>
</xsl:attribute>
<xsl:attribute name="david">
<xsl:value-of select="
position() +
ceiling( count(../preceding-sibling::G1/M) div $M-per-G2)"/>
</xsl:attribute>
<xsl:copy-of select="
. | following-sibling::M[position() < $M-per-G2]"/>
</G2>
</xsl:template>There is a certain tedium to the problem. I thought there might be a standard idiom to sequentially number the result tree. Wendell probably suggested it: Do it in two passes.
<?xml version="1.0" encoding="iso-8859-1"?>
<Groups>
<G1>
<G2 no="1" david="1">
<M>eins</M>
<M>zwei</M>
<M>drei</M>
<M>vier</M>
<M>f|nf</M>
<M>sechs</M>
<M>sieben</M>
</G2>
</G1>
<G1>
<G2 no="8" david="2">
<M>acht</M>
<M>neun</M>
<M>zehn</M>
<M>elf</M>
<M>zwvlf</M>
</G2>
</G1>
<G1>
<G2 no="13" david="2">
<M>usw</M>
</G2>
</G1>
<G1>
<G2 no="14" david="3">
<M>usw</M>
</G2>
</G1>
<G1>
<G2 no="15" david="3">
<M>usw</M>
</G2>
</G1>
</Groups>| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Numbering new nodes using, David Carlisle | Thread | Re: [xsl] Numbering new nodes using, David Carlisle |
| Re: [xsl] atom:content @type="html", Martin Honnen | Date | Re: [xsl] length of string from a s, Martin Honnen |
| Month |