> So, what will happen for this expression:
>
> unparsed-text-lines(...)[3]
Saxon will read the first three
items, deliver the third, and read no further. With luck, it will remember
to close the file.
>
> Will referencing the 1000th line and then referencing the 10th line
work?
>
Yes. In this case you will need a variable, something
like
let $x := unparsed-text-lines(...)
return
($x[1000], $x[10])
Saxon implements $x using a data structure called
a MemoClosure where items from the input are read on-demand, and then
remembered. Reading $x[1000] will cause the first 1000 items to be read
and retained in memory; reading $x[10] finds that the tenth item is
already in memory. No further items from the file are requested, so none
are read. And I suspect the input file never gets closed....
Michael
Kay
Saxonica
|