[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] Assigning unique id to new node using generate-id()
Subject: Re: [xsl] Assigning unique id to new node using generate-id() From: <kyle.himmerick@xxxxxxxxxxxxxx> Date: Wed, 13 Aug 2003 14:40:34 -0400 (EDT) |
Thank you for you reply. I would like to keep the existing ID's the same. As they are referenced from other nodes (a credential is referenced from 0 or more services). My current workaround seems to be working although I'm not 100% convinced that it will always create a unique id. After new node is created without an id, I transform the document again with. This is run against the result of the first transform which adds the new credential without and id. <xsl:for-each select="credential"> <xsl:choose> <xsl:when test="@id"> <xsl:copy-of select="."/> </xsl:when> <xsl:otherwise> <credential> <xsl:attribute name="id"> <xsl:value-of select="generate-id()"/> </xsl:attribute> <xsl:copy-of select="username"/> <xsl:copy-of select="password"/> <xsl:copy-of select="description"/> <xsl:copy-of select="lastModified"/> </credential> </xsl:otherwise> </xsl:choose> </xsl:for-each> As I said, this seems to work. What other methods would you recommend for generating a unique id? It is possible, albeit unlikely, that the a profile may contain identical credential nodes (where username, password, description and lastModified are identical). Thanks, Kyle On Wed, 13 Aug 2003 13:10 , Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> sent: >Hi Kyle, > >At 12:11 PM 8/13/2003, you wrote: >>I'd like this stylesheet to copy all existing credential nodes and create >>a new >>node assigning a unique id > >It's a reasonable requirement. > >> with generate-id(). > >Why? as opposed to by some other means? > >> It appears as if the generate-id >>call doesn't observe existing id's in the current/copied credential >>nodes. So I >>end up with duplicate (illegal) id's. I've tried passing several context >>nodes >>to the generate-id() function, but with no luck. >> >>Sample XSL: >> >> >> >> >> >> >> >> >> select="generate-id()"/> >> >> >> select="$username"/> >> >> select="$password"/> >> >> select="$description"/> >> >>select="java:getCurrentDateTimeGMT($dateHelper)"/> >> >> >> >> >>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. > >The root of your problem is in thinking that generate-id() assigns (unique) >IDs to new nodes, when it doesn't; it merely assigns (or retrieves) an ID >for a node in the source. The generated value has nothing to do with any >value in the source, even if on an attribute called "id". It needs only to >be unique to the node provided as argument to the function, or to the >context node (in your case, "/profile") if none is given. > >Given the code you have provided, in which you create only one >and assign it an ID unique to the you have matched, there is a >good chance that the observed duplication is actually faithful to the >input, in which IDs are not unique (check to verify whether this is not the >case). To guarantee uniqueness, reassign an ID to every credential. Since >you are also creating new credentials, a second pass (your current >workaround) is an appropriate place to do this. If you have a requirement >to preserve IDs where they exist, this is a more complex problem and >generate-id() is probably not part of the solution at all. > >Cheers, >Wendell > > > >====================================================================== >Wendell Piez wapiez@xxxxxxxxxxxxxxxx','','','')">wapiez@xxxxxxxxxxxxxxxx >Mulberry Technologies, Inc. http://www.mulberrytech.com >17 West Jefferson Street Direct Phone: 301/315-9635 >Suite 207 Phone: 301/315-9631 >Rockville, MD 20850 Fax: 301/315-8285 >---------------------------------------------------------------------- > Mulberry Technologies: A Consultancy Specializing in SGML and XML >====================================================================== > > > 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 | Re: [xsl] Assigning unique id to ne, Wendell Piez |
Re: [xsl] Number of scans required , Dipesh Khakhkhar | Date | Re: [xsl] How to "copy" a DTD refer, J.Pietschmann |
Month |
Keywords