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"><<a href="mailto:davidc@nag.co.uk">davidc@nag.co.uk</a>></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't well formed, if I make it so:<br>
<br>
<br>
<x><br>
<div class="im"><testXML><br>
<system><br>
<node-name><br>
<name>name1</name><br>
<addInfo>t11</addInfo><br>
<node-name><br>
<name>name2</name><br>
<addInfo>t22</addInfo><br>
<node-name><br>
<addInfo>t33</addInfo><br>
<name>name3</name><br>
</node-name><br>
</node-name><br>
</node-name><br>
</system><br>
</testXML><br>
<br>
<br>
<br>
</div><div class="im"><somewhere-it-is-used><br>
<what-the-name--of-var-is><br>
<ref>name1</ref><br>
<ref>name3 'sdsdsd'</ref><br>
</what-the-name--of-var-is><br>
<br>
<br>
<br>
</div><div class="im"> <what-the-name--of-var-is><br>
<ref>name1</ref><br>
</what-the-name--of-var-is><br>
<br>
</somewhere-it-is-used><br>
<br>
</div></x><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(.,' .*$','')<br>
return<br>
<var ref="{string-join($s,'/')}"><br>
{local:ref(/,$s)}<br>
</var><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>
<?xml version="1.0" encoding="UTF-8"?><br>
<var ref="name1/name3"><br>
<addInfo>t33</addInfo><br>
</var><br>
<var ref="name1"><br>
<addInfo>t11</addInfo><br>
</var><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>