[xquery-talk] recurrency

Michalmas michalmas at gmail.com
Wed Mar 11 22:51:19 PST 2009


Hello David,

Thank you very much for help.

Later i realized i tried to do it in loop (no recursion), and then the
variable state was lost.

About your solution - i had to use Altova XML Spy for that, and i had some
problems.

The definition of function:
declare function local:ref ($node as node()***, $s as xs:string*) {

required putting star, as we pass many nodes.

I also simplified the example too much, so i had to change some more things.

But it perfectly works!

Thanks,
Michal


On Wed, Mar 11, 2009 at 10:33 AM, David Carlisle <davidc at nag.co.uk> wrote:

>
>
> Your posted input wan't well formed, if I make it so:
>
>
> <x>
> <testXML>
>   <system>
>       <node-name>
>           <name>name1</name>
>           <addInfo>t11</addInfo>
>            <node-name>
>                   <name>name2</name>
>                   <addInfo>t22</addInfo>
>                   <node-name>
>                            <addInfo>t33</addInfo>
>                            <name>name3</name>
>                   </node-name>
>            </node-name>
>       </node-name>
>   </system>
> </testXML>
>
>
>
> <somewhere-it-is-used>
>   <what-the-name--of-var-is>
>        <ref>name1</ref>
>        <ref>name3 'sdsdsd'</ref>
>   </what-the-name--of-var-is>
>
>
>
>    <what-the-name--of-var-is>
>        <ref>name1</ref>
>   </what-the-name--of-var-is>
>
> </somewhere-it-is-used>
>
> </x>
>
>
>
> Then I think this returns what you want for the two references.
>
>
>
>
> declare function local:ref ($node as node(), $s as xs:string*) {
> if (empty($s))
> then
> $node/addInfo
> else
> local:ref($node/descendant::node-name[name=$s[1]][1],$s[position()!=1])
> };
>
> for $v in /x/somewhere-it-is-used/what-the-name--of-var-is
> let $s := $v/ref/replace(.,' .*$','')
> return
> <var ref="{string-join($s,'/')}">
> {local:ref(/,$s)}
> </var>
>
>
>
> as demonstrated by saxon if the above are saved in ref.xml and ref.xq
> respectively.
>
>
>
> $ saxon9q -s:ref.xml ref.xq
> <?xml version="1.0" encoding="UTF-8"?>
> <var ref="name1/name3">
>   <addInfo>t33</addInfo>
> </var>
> <var ref="name1">
>   <addInfo>t11</addInfo>
> </var>
>
> ________________________________________________________________________
> The Numerical Algorithms Group Ltd is a company registered in England
> and Wales with company number 1249803. The registered office is:
> Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
>
> This e-mail has been scanned for all viruses by Star. The service is
> powered by MessageLabs.
> ________________________________________________________________________
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://x-query.com/pipermail/talk/attachments/20090311/9ccb55f6/attachment.htm


More information about the talk mailing list