I'd recommend the following.
(1) you can run position() function in a for-each node
testing, and if the value falls in 1-10, that will be 1st page, 11-20, 2nd page, and so on.
(2) you can also insert some numbering attribute to the records from say 1 to 100. Then output only those fall in the right range for a given page.
(3) the best is to run xslt thru a subset of the XML records, probably at the DB end. This way, the performance is good. Imagine if you later have 10,000 records, grabbing 10 records out of them would be a very costly step.
(4) other inputs from ranchers?