I came across this interesting post by Rajshekar's comparison of the XSLT and BizTalk (virtual) maps. BizTalk Virtual Mapper VS Custom-XSLT
As per my experience, if you are experienced BizTalk developer then obviously you also faced this dilemma before....
There are many options to transform one xml / multiple xml to new xml
1. Use BizTalk mapper
2. Use .NET assembly which takes xmlnode as parameter and then use System.xml xpath queries in .net class
3. Use of XSLT
My personal favorite has been using XSLT or .NET class (especially in BTS04 upto BTS06 R2) as both these options gave me chance to debug my code than just testing it (as we do in map). But with newer mapper in 2010 things look much better than previous versions of BizTalk.
But from my experience too XSLT or .NET class remains my preferred approaches over BizTalk mapper.
What's your preferred way of transformation of messages?