The command
$ xmlstarlet sel -t -c \"/collection/record\" file.xml
seems to load the whole file into memory, before applying the given Xpat
Since I only needed a tiny subset of XPath for large XML files, I actually implemented a little tool myself: xmlcutty.
The example from my question could be written like this:
$ xmlcutty -path /collection/record file.xml