Subject: Re: [xsl] Assigning unique id to new node using generate-id() From: <kyle.himmerick@xxxxxxxxxxxxxx> Date: Wed, 13 Aug 2003 15:47:01 -0400 (EDT) |
Thanks for all of your feedback. I've got a solution that will meet my requirements. I've added a nextCredentialID attribute to the users profile. This will serve as a counter, that I will update each time I add a new credential (but won't change when I edit or delete a credential). Then for the credentialID of the new node, I prefix with a 'c' so it's a valid xml ID attribute. Below is the sylesheet I'm using to add a new credential. <xsl:template match="/profile"> <profile> <xsl:attribute name="nextCredentialID"> <xsl:value-of select="number(@nextCredentialID) + number('1')"/> </xsl:attribute> <xsl:for-each select="credential"> <xsl:copy-of select="."/> </xsl:for-each> <credential> <xsl:attribute name="id"> <xsl:value-of select="concat('c', @nextCredentialID)"/> </xsl:attribute> <username><xsl:value-of select="$username"/></username> <password><xsl:value-of select="$password"/></password> <description><xsl:value-of select="$description"/></description> <lastModified><xsl:value-of select="java:getCurrentDateTimeGMT($dateHelper)"/></lastModified> </credential> </xsl:template> Thanks again for your help. Kyle On Wed, 13 Aug 2003 17:57 , David Carlisle <davidc@xxxxxxxxx> sent: > >> It appears as if the generate-id >> call doesn't observe existing id's in the current/copied credential nodes. > >that is so, the only thing generate-id() is defined to do is >return a unique string that matches the Name production (so is usable as >an id) when applied to any node in the source. > >> My current workaround is to transform twice. The first transformation appends >> the new credential node. The second transformation assigns an id (using >> generate-id()) to any credential nodes without an id (probably only newly >> created). Seems like I should be able to do it all in one transform. > >That doesn't sound a safe workaround. You have no assurance that the ids >generated on the second pass won't be teh same as an existing id in your >source. > >If you don't need the ids to be stable you could of course regenerate >the document wioth new ids in each case, generated by generate-id() they >would all then be distinct but also typically didffernt from teh id in >teh source. > >Otherwise you need a different way to generate unique id. Two obvious contenders. >As your are always adding to teh doc you coul duse > > > >... > >so the id will be id followed by teh number of elements you had before, >this will go up by one each time, > >or you could use > >':- ','')}"> > >an use an id based on the current time. > >David > >________________________________________________________________________ >This e-mail has been scanned for all viruses by Star Internet. The >service is powered by MessageLabs. For more information on a proactive >anti-virus service working around the clock, around the globe, visit: >http://www.star.net.uk >________________________________________________________________________ > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Assigning unique id to ne, Michael Kay | Thread | [xsl] xsl-resource, xsl_chatr |
[xsl] Re: XML to Powerpoint, Dimitre Novatchev | Date | [xsl] passing variable through to d, Eric Smith |
Month |