Hello guys,<br><br>I was trying to achieve recurrency in my code. However, it seemed to be quite hard as there is no 'global' 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><testXML><br> <system><br> <node-name><br> <name>name1</name><br> <node-name><br>
<name>name2</name><br> <node-name><br>
<name>name3</name>
<br> <node-name>
<br> <node-name><br> <node-name><br> </system><br></testXML><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), ' \(.*\)' , '')<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), ' \(.*\)' , '')<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), ' \(.*\)' , '')<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), ' \(.*\)' , '')<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), ' \(.*\)' , '')<br> let $fir := local:getNodeDefinitionFour($sys, $node1, $node2, $node3, $node4)<br> let $res := $fir//node-name[data(name) = $processed]<br>
return $res<br>};<br>