[xquery-talk] recurrency

Michalmas michalmas at gmail.com
Tue Mar 10 22:40:29 PST 2009


Hello guys,

I was trying to achieve recurrency in my code. However, it seemed to be
quite hard as there is no 'global' view of variable.

So fat, i developed simple replcement for that. But i believe it can be done
much simpler.

The XML looks like:
<testXML>
   <system>
       <node-name>
           <name>name1</name>
            <node-name>
                   <name>name2</name>
                   <node-name>
                            <name>name3</name>
                    <node-name>
            <node-name>
       <node-name>
   </system>
</testXML>

The path to name3 can be given as name1/name2/name3, but slao as
name1/name3.

I wrote functions for going depper and deeper in the definition. Can it be
simplified?

declare function local:getNodeDefinitionOne($sys as item(), $node1 as
item())as item()*
{
    let $processed := replace(data($node1), ' \(.*\)' , '')
    let $res := testXML/$sys//node-name[data(name) = $processed]
    return $res
};

declare function local:getNodeDefinitionTwo($sys as item(), $node1 as
item(), $node2 as item())as item()*
{
    let $processed := replace(data($node2), ' \(.*\)' , '')
    let $fir := local:getNodeDefinitionOne($sys, $node1)
    let $res := $fir//node-name[data(name) = $processed]
    return $res
};

declare function local:getNodeDefinitionThree($sys as item(), $node1 as
item(), $node2 as item(), $node3 as item())as item()*
{
    let $processed := replace(data($node3), ' \(.*\)' , '')
    let $fir := local:getNodeDefinitionTwo($sys, $node1, $node2)
    let $res := $fir//node-name[data(name) = $processed]
    return $res
};

declare function local:getNodeDefinitionFour($sys as item(), $node1 as
item(), $node2 as item(), $node3 as item(), $node4 as item() )as item()*
{
    let $processed := replace(data($node4), ' \(.*\)' , '')
    let $fir := local:getNodeDefinitionThree($sys, $node1, $node2, $node3)
    let $res := $fir//node-name[data(name) = $processed]
    return $res
};

declare function local:getNodeDefinitionFive($sys as item(), $node1 as
item(), $node2 as item(), $node3 as item(), $node4 as item(), $node5 as
item() )as item()*
{
    let $processed := replace(data($node5), ' \(.*\)' , '')
    let $fir := local:getNodeDefinitionFour($sys, $node1, $node2, $node3,
$node4)
    let $res := $fir//node-name[data(name) = $processed]
    return $res
};
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://x-query.com/pipermail/talk/attachments/20090310/18ff2a6a/attachment.htm


More information about the talk mailing list