Hello David,<br><br>Thank you very much for help.<br><br>Later i realized i tried to do it in loop (no recursion), and then the variable state was lost.<br><br>About your solution - i had to use Altova XML Spy for that, and i had some problems.<br>
<br>The definition of function:<br>declare function local:ref ($node as node()<u style="color: rgb(255, 0, 0);"><b>*</b></u>, $s as xs:string*) {<br><br>required putting star, as we pass many nodes.<br><br>I also simplified the example too much, so i had to change some more things.<br>
<br>But it perfectly works!<br><br>Thanks,<br>Michal<br><br><br><div class="gmail_quote">On Wed, Mar 11, 2009 at 10:33 AM, David Carlisle <span dir="ltr">&lt;<a href="mailto:davidc@nag.co.uk">davidc@nag.co.uk</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
Your posted input wan&#39;t well formed, if I make it so:<br>
<br>
<br>
&lt;x&gt;<br>
<div class="im">&lt;testXML&gt;<br>
   &lt;system&gt;<br>
       &lt;node-name&gt;<br>
           &lt;name&gt;name1&lt;/name&gt;<br>
           &lt;addInfo&gt;t11&lt;/addInfo&gt;<br>
            &lt;node-name&gt;<br>
                   &lt;name&gt;name2&lt;/name&gt;<br>
                   &lt;addInfo&gt;t22&lt;/addInfo&gt;<br>
                   &lt;node-name&gt;<br>
                            &lt;addInfo&gt;t33&lt;/addInfo&gt;<br>
                            &lt;name&gt;name3&lt;/name&gt;<br>
                   &lt;/node-name&gt;<br>
            &lt;/node-name&gt;<br>
       &lt;/node-name&gt;<br>
   &lt;/system&gt;<br>
&lt;/testXML&gt;<br>
<br>
<br>
<br>
</div><div class="im">&lt;somewhere-it-is-used&gt;<br>
   &lt;what-the-name--of-var-is&gt;<br>
        &lt;ref&gt;name1&lt;/ref&gt;<br>
        &lt;ref&gt;name3 &#39;sdsdsd&#39;&lt;/ref&gt;<br>
   &lt;/what-the-name--of-var-is&gt;<br>
<br>
<br>
<br>
</div><div class="im">   &lt;what-the-name--of-var-is&gt;<br>
        &lt;ref&gt;name1&lt;/ref&gt;<br>
   &lt;/what-the-name--of-var-is&gt;<br>
<br>
&lt;/somewhere-it-is-used&gt;<br>
<br>
</div>&lt;/x&gt;<br>
<br>
<br>
<br>
Then I think this returns what you want for the two references.<br>
<br>
<br>
<br>
<br>
declare function local:ref ($node as node(), $s as xs:string*) {<br>
if (empty($s))<br>
then<br>
$node/addInfo<br>
else<br>
local:ref($node/descendant::node-name[name=$s[1]][1],$s[position()!=1])<br>
};<br>
<br>
for $v in /x/somewhere-it-is-used/what-the-name--of-var-is<br>
let $s := $v/ref/replace(.,&#39; .*$&#39;,&#39;&#39;)<br>
return<br>
&lt;var ref=&quot;{string-join($s,&#39;/&#39;)}&quot;&gt;<br>
{local:ref(/,$s)}<br>
&lt;/var&gt;<br>
<br>
<br>
<br>
as demonstrated by saxon if the above are saved in ref.xml and ref.xq<br>
respectively.<br>
<br>
<br>
<br>
$ saxon9q -s:ref.xml ref.xq<br>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>
&lt;var ref=&quot;name1/name3&quot;&gt;<br>
   &lt;addInfo&gt;t33&lt;/addInfo&gt;<br>
&lt;/var&gt;<br>
&lt;var ref=&quot;name1&quot;&gt;<br>
   &lt;addInfo&gt;t11&lt;/addInfo&gt;<br>
&lt;/var&gt;<br>
<div><div></div><div class="h5"><br>
________________________________________________________________________<br>
The Numerical Algorithms Group Ltd is a company registered in England<br>
and Wales with company number 1249803. The registered office is:<br>
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.<br>
<br>
This e-mail has been scanned for all viruses by Star. The service is<br>
powered by MessageLabs.<br>
________________________________________________________________________<br>
</div></div></blockquote></div><br>