If what you've got is a database structured as a flat list of 10k records, with each record having fairly reguar strucutre, then I agree that at this time that looks like a classic application for simple SAX-based processing. If their structure isn't so regular, using SAX to extract the records and running them individually through XSLT might be a good approach.
Most XSLT processors do load the whole XML file into memory, since the XSLT language supports full random access to the document's contents -- which may be overkill for your case. There's a lot of interest in "pruning" solutions -- analysing the stylesheet to understand when data will never be referred to again and can thus be discarded from memory -- but as far as I know nobody yet has that in full production. (If you search this mailing list's archives for pruning, you'll see past discussion of this issue.) I had a first draft of "manual" pruning code (triggered by a user-callable extension function) sketched up for Xalan, but we recently made some substantial changes which will require redesigning that.
