Hello guys,<br><br>I was trying to achieve recurrency in my code. However, it seemed to be quite hard as there is no &#39;global&#39; view of variable.<br><br>So fat, i developed simple replcement for that. But i believe it can be done much simpler.<br>
<br>The XML looks like:<br>&lt;testXML&gt;<br>   &lt;system&gt;<br>       &lt;node-name&gt;<br>           &lt;name&gt;name1&lt;/name&gt;<br>            &lt;node-name&gt;<br>
                   &lt;name&gt;name2&lt;/name&gt;<br>                   &lt;node-name&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>The path to name3 can be given as name1/name2/name3, but slao as name1/name3.<br><br>I wrote functions for going depper and deeper in the definition. Can it be simplified?<br>
<br>declare function local:getNodeDefinitionOne($sys as item(), $node1 as item())as item()*<br>{<br>    let $processed := replace(data($node1), &#39; \(.*\)&#39; , &#39;&#39;)<br>    let $res := testXML/$sys//node-name[data(name) = $processed]<br>
    return $res<br>};<br><br>declare function local:getNodeDefinitionTwo($sys as item(), $node1 as item(), $node2 as item())as item()*<br>{<br>    let $processed := replace(data($node2), &#39; \(.*\)&#39; , &#39;&#39;)<br>
    let $fir := local:getNodeDefinitionOne($sys, $node1)<br>    let $res := $fir//node-name[data(name) = $processed]<br>    return $res<br>};<br><br>declare function local:getNodeDefinitionThree($sys as item(), $node1 as item(), $node2 as item(), $node3 as item())as item()*<br>
{<br>    let $processed := replace(data($node3), &#39; \(.*\)&#39; , &#39;&#39;)<br>    let $fir := local:getNodeDefinitionTwo($sys, $node1, $node2)<br>    let $res := $fir//node-name[data(name) = $processed]<br>    return $res<br>
};<br><br>declare function local:getNodeDefinitionFour($sys as item(), $node1 as item(), $node2 as item(), $node3 as item(), $node4 as item() )as item()*<br>{<br>    let $processed := replace(data($node4), &#39; \(.*\)&#39; , &#39;&#39;)<br>
    let $fir := local:getNodeDefinitionThree($sys, $node1, $node2, $node3)<br>    let $res := $fir//node-name[data(name) = $processed]<br>    return $res<br>};<br><br>declare function local:getNodeDefinitionFive($sys as item(), $node1 as item(), $node2 as item(), $node3 as item(), $node4 as item(), $node5 as item() )as item()*<br>
{<br>    let $processed := replace(data($node5), &#39; \(.*\)&#39; , &#39;&#39;)<br>    let $fir := local:getNodeDefinitionFour($sys, $node1, $node2, $node3, $node4)<br>    let $res := $fir//node-name[data(name) = $processed]<br>
    return $res<br>};<br>