XSLT provides an effective and elegant solution to many typical transformation problems. Transformation of data is often thought of as something that a program must do. But as XSLT has demonstrated, that is not always true. An XSLT stylesheet looks like XML and so I have a hard time considering it a programming language like C or Java. Nevertheless, XSLT is capable of modifying an XML tree. It can act on input data and produce different outputs. There are cases, however, where limitations of XSLT is evident. Unlike a typical programming language, XSLT has limited number of data types. It also has a limited number of built-in functions. So as a design issue, one has to consider what types of transformations are natural for XSLT and what transformations require a traditional programming language. There is an alternative to his approach and that is to use XSLT extensions.
If you have been skeptical about XSLT due to some of its limitations, you should seriously consider XSLT extensions. They provide a nice framework for using conventional programming tasks and incorporating business logic into transformations done by XSLT. Performance, most likely remain an issue and any time two disparate programming models are combined, careful attention should be give to design details to assure interoperability, reliability and ease of use.