I think your approach is quite ok: I would choose the same approach. About reusing the XML doc: if the interface is designed so that the XML source document you supplied for transformation is referred only by filename, then it's impossible to reuse it. That is, if you perform the transformation by calling some function like this:
outputDoc = transform(xmlFileName, xsltFileName)
and this is the only way to perform transformations in your cfml pages,
then you can't reuse XML documents for that purpose. Or, if you can use objects to perform transformations, like this, for example:
sourceXMLObj = load(xmlFileName);
xsltObj = load(xslFileName);
outputDoc = transform(sourceXMLObj, xsltObj)
then probably you can get the XML source object once and put it in a session variable for later use. But in this case you must be sure that the XML source document is not very big to hurt the server memory(may be the server will keep the XML as a DOM tree, which is really expensive) since the server will keep one such object for every user-session.
If you are thinking also about how to pass the parameter to the stylesheet (through apTransDetail.cfm), then you must look at MSXML's documentation. Generally, every XSLT processor does it in a different form.