Marc,

 

I’ve solved the issue in another way but thanks anyway for the code snippet.

 

Rob.

 

Van: Marc van Grootel [mailto:marc.van.grootel@gmail.com]
Verzonden: vrijdag 15 augustus 2014 12:50
Aan: Rob Stapper
CC: BaseX
Onderwerp: Re: [basex-talk] relative path between two element in xquery

 

Hey Rob,

 

In my lib I have a function that protects all regexp special characters.

Maybe a bit too much heavy machinery for what it does but it works ;-)

I gladly receive improvements.

 

declare function route:re-escape($string as xs:string)

    as xs:string {

    let $regexp-chars :=  ('.','*','+','|','?','(',')','[',']','{','}','^')

    return

        (: Note that '\' and '$' in the fold caused invalid pattern errors therefore put them in separate replace :)

        fold-left(

            $regexp-chars, 

            replace(replace($string, '\\', '\\\\'), '\$', '\\\$'), 

            function($a, $b) {

                replace($a, '\'||$b, '\\'||$b )

            }

        )

};

 

--Marc

 

On Fri, Aug 15, 2014 at 11:55 AM, Rob Stapper <r.stapper@lijbrandt.nl> wrote:

Hi,

 

How can I construct the relative path between two elements in an xml-file.

Most probably overlooking the obvious I ended up with the solution below, which, unfortunately, triggers an runtime-error.

 

My not-working solution:

 

let $xml :=

  <xml>

    <A>

      <B/>

    </A>

  </xml>

let $b   := $xml//B

let $a   := $xml//A

 

return replace( string( path( $b))

                             , string( path( $a))

                             , ''

                            )

 

Two questions:

-          How to retrieve the relative path between two element within a xml-file?

-          Why does the solution above trigger an error? Can it be a bug? ( oops, three questions)

 

Thnx in advance for the reply,

Rob Stapper

 


Afbeelding verwijderd door afzender.

Dit e-mailbericht bevat geen virussen en malware omdat avast! Antivirus actief is.

 



 

--
--Marc




Dit e-mailbericht bevat geen virussen en malware omdat avast! Antivirus actief is.