xsl-list
[Top] [All Lists]

Re: [xsl] How to use generate-id() inside an xsl:function without a node available?

2007-02-27 13:45:11
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(_dot_)online(_at_)xs4all(_dot_)nl> 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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>