[xquery-talk] xquery with large xml file

Michael Kay mhk at mhk.me.uk
Wed Apr 19 17:45:17 PDT 2006

> I finally got around to running this against the 100Mb data 
> file with Saxon.
> It produces the same size output (don't know why the 
> expansion factor should be different on the 10Mb file) in 5 
> minutes 45 seconds. 

The equivalent non-recursive query

//*/string-join(ancestor-or-self::*/local-name(), '/')

(actually a pure XPath expression) takes 2 mins 23 seconds.

I also tried a top-down approach, to reduce the number of redundant string
concatenations and calls on local-name():

declare function local:pathOfNodes($parentPath as xs:string, $node as
node()) as xs:string* {
    let $this := concat($parentPath, '/', local-name($node)) 
    return ($this, $node/*/local:pathOfNodes($this, .))
local:pathOfNodes('', /*)

This took 3m 29s.

Michael Kay

More information about the talk mailing list