[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: How to use generate-id() inside an xsl:function w

Subject: Re: How to use generate-id() inside an xsl:function without a node available?
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Tue, 27 Feb 2007 13:30:03 -0800
Re:  How to use generate-id() inside an xsl:function  w
Cheap impementation.
=================

It may even be possible to only use one node (and then immediately
delete it as part of the closing of the scope of the function. Looking
at the spec I am not sure, however if re-using the generated ID for a
node (which is no longer alive) is allowed or not. If it is not
allowed, then we have the following *cheap* implementation:



<xsl:function name="pref:myId" as="xs:string">
<xsl:variable name="myNode" as="element()">
   <someNode/>
</xsl:variable>

<xsl:variable name="vdynNode" as="element()">
  <xsl:copy-of select="$myNode"/>
</xsl:variable>

<xsl:sequence select="generate-id($vdynNode)"/>

<xsl:function


-- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play


On 2/27/07, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
Hve an auxiliary function, which creates a new node every time t is
evaluated, for example using:

<xsl:function name="pref:GetNode" as="element()">
 <xsl:variable name="myNode" as="element()">
  <someNode/>
 </xsl:variable>

 <xsl:copy-of select="$myNode"/>
<xsl:function


Then in your code use:


generate-id(pref:GetNode() )



--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play



On 2/27/07, Abel Braaksma <abel.online@xxxxxxxxx> wrote:
> Hi List,
>
> This seems an obvious question to ask, but I couldn't find anything on
> the net (but more often than not, it is a matter of wrong keywords, I am
> sure). The issue is this: I have a function that generates some nodes
> based on some strings and these nodes must receive a unique ID/IDREF
> value. Normally, one would use generate-id(), but inside a function (or
> inside anything that does not have a context node), generate-id() will fail.
>
> My question: how can I create unique identifiers without a node in sight?
>
> Example function (which will err):
>
> <xsl:function name="my:dupSVGText">
>   <xsl:variable name="new-id" select="generate-id()" />
>   <svg:text id="{$new-id}">some text</svg:text>
>   <svg:use xlink:href="#{$new-id}" y="10" />
> </xsl:function>
>
> My original function is a bit larger (ahum, counted > 100 lines today,
> time for refactoring...) and creates some SVG objects that reference one
> another, which is why I must make sure the ID for referencing the
> xlink:href attributes are unique within the document. Don't let the SVG
> and XLink upset or distract you, I just mention it to explain my use-case.
>
> And no, there's no way that there will be a node in sight (it is really
> disconnected from the source document). Yes, I can use different
> techniques than xsl:function if needed (of course). Oh, and before I
> forget: I can do so with extension functions or assignable variables
> (saxon), but I'd rather not to.
>
> Any ideas? It seems easy enough, but I couldn't find any (quick)
> resolutions.
>
> TIA,
>
> Cheers,
> -- Abel

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.