|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] recurrencyMichalmas michalmas at gmail.comTue 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






