Hi Jeroen, I am using version 6.05.03 cheers, amon> Date: Tue, 25 Nov 2008 11:19:49 +0100> From: [EMAIL PROTECTED]> To: [email protected]> Subject: Re: [HippoCMS-dev] auto id's> > Hi Amon,> > which version of the CMS are you using?> > Regards,> > Jeroen> > Amon wrote:> > Hi all,> > > > I have a tree structure backend template:> > > > <xs:element name="nodes">> > <xs:complexType>> > <xs:sequence>> > <xs:element name="node" minOccurs="0" maxOccurs="unbounded">> > <xs:complexType> > > <xs:sequence> > > <xs:element ref="node" minOccurs="0" maxOccurs="unbounded"/>> > <xs:element name="nl-NL" type="xs:string"/> > > <xs:element name="label" type="xs:string"/> > > </xs:sequence>> > <xs:attribute name="id" type="xs:string"/> > > </xs:complexType>> > </xs:element>> > > > </xs:sequence>> > </xs:complexType>> > </xs:element>> > > > I want to generate an autonumber id for each item in a tree. Once strict rule is that once an id is giving to an element it should never be reused. Even id's of elements that are deleted.> > > > To implement this i use an post processing xslt:> > <xsl:import href="extensions://types/resources/xsl//autoids.xsl"/>> > > > <xsl:variable name="max_id_stored" select="/nodes/@maxid"/>> > <xsl:variable name="CONTAINER_EL">node</xsl:variable>> > <xsl:variable name="ID_ATTR">id</xsl:variable>> > <xsl:variable name="ELM_IGNORE">state</xsl:variable>> > > > <xsl:template match="nodes">> > <nodes maxid="{$new_max_id}"> > > <xsl:apply-templates select="*"/> > > </nodes>> > </xsl:template>> > > > where maxid is constantly updated!.> > > > the autoid.xsl contains:> > <xsl:variable name="max">> > <xsl:call-template name="max">> > <xsl:with-param name="nodes" select="//*[name()=$CONTAINER_EL]/@*[name()=$ID_ATTR and string(number(.))!='NaN']"/>> > </xsl:call-template>> > </xsl:variable>> > > > <xsl:variable name="maxid">> > <xsl:choose>> > <xsl:when test="(string(number($max_id_stored))='NaN' or number($max_id_stored) <= number($max)) and number($max) >= 0">> > <xsl:value-of select="number($max) + 1"/> > > </xsl:when>> > <xsl:when test="string(number($max_id_stored)) != 'NaN'">> > <xsl:value-of select="$max_id_stored"/>> > </xsl:when>> > <xsl:otherwise>0</xsl:otherwise>> > </xsl:choose>> > </xsl:variable>> > > > <xsl:variable name="nrOfElementsWithoutId" select="count(//*[name()=$CONTAINER_EL and (@*[name()=$ID_ATTR]='' or count(@*[name()=$ID_ATTR])=0)])"/>> > > > <xsl:variable name="new_max_id" select="number($nrOfElementsWithoutId)+number($maxid)"/>> > > > <xsl:template match="@*|node()">> > <xsl:copy>> > <xsl:apply-templates select="@*|node()"/>> > </xsl:copy>> > </xsl:template>> > > > <xsl:template match="*[name()=$CONTAINER_EL]" priority="9">> > <xsl:copy>> > <xsl:attribute name="{$ID_ATTR}">> > <xsl:choose>> > <xsl:when test="number(@*[name()=$ID_ATTR]) >= 0 or string-length(@*[name()=$ID_ATTR]) > 0">> > <xsl:value-of select="@*[name()=$ID_ATTR]"/>> > </xsl:when>> > <xsl:otherwise>> > <xsl:variable name="emptyPrecedingIds">> > <xsl:number level="any" count="*[name()=$CONTAINER_EL and (@*[name()=$ID_ATTR]='' or count(@*[name()=$ID_ATTR])=0)]"/>> > </xsl:variable> > > <xsl:number value="number($maxid)+number($emptyPrecedingIds)-1" format="1"/>> > </xsl:otherwise>> > </xsl:choose>> > </xsl:attribute> > > <xsl:apply-templates select="@*[name()!=$ID_ATTR]|node()"/> > > </xsl:copy> > > </xsl:template>> > > > > > This code reuses id's. > > What i also notices is that <xsl:variable name="max_id_stored" select="/nodes/@maxid"/> is not updated with the new maxid after a save. Only after i close en open the document again. This is one of the reason it can reuses ids of those elements that are deleted. How come max_id_stored is not changed after a save? Any help?> > > > THanks in advance,> > Amon> > > > > > > > > > > > _________________________________________________________________> > Express yourself instantly with MSN Messenger! Download today it's FREE!> > http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/********************************************> > Hippocms-dev: Hippo CMS development public mailinglist> > > > Searchable archives can be found at:> > MarkMail: http://hippocms-dev.markmail.org> > Nabble: http://www.nabble.com/Hippo-CMS-f26633.html> > > ********************************************> Hippocms-dev: Hippo CMS development public mailinglist> > Searchable archives can be found at:> MarkMail: http://hippocms-dev.markmail.org> Nabble: http://www.nabble.com/Hippo-CMS-f26633.html> _________________________________________________________________ Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/******************************************** Hippocms-dev: Hippo CMS development public mailinglist
Searchable archives can be found at: MarkMail: http://hippocms-dev.markmail.org Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
