|
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 |