К сожалению, Saxon - единственная игра в городе с бесплатной реализацией XSLT 2.0. Сам Саксон великолепен, но это только Java или .NET, со всеми вытекающими отсюда последствиями.
Вызов его из командной строки или с помощью системного вызова каждый раз будет стоить запуск JVM, так что вы, вероятно, не хотите этого делать.
Некоторые вещи, которые вы можете попробовать:
1) Вы уверены, что вам нужен XSLT 2.0? Если вы не используете функциональность, которая не в 1.0, ваш XSLT может быть 1.0-совместимым. Тогда вы можете использовать xsltproc. Если вам нужен EXSLT, xsltproc имеет некоторую поддержку для этого.
2) Если вам определенно нужна версия 2.0, то вы захотите создать какую-нибудь оболочку для саксонца. Многое зависит от того, в какой среде вы хотите использовать это, так что это может быть веб-сервис или что-то в этом роде. Для проекта, над которым я работаю, мы используем небольшую программу прослушивания TCP, которая оборачивает saxon. Вы можете увидеть это здесь: http://idp.atlantides.org/svn/idp/idp.contenttool/trunk/epiduke_saxon/ Это хорошо работает для пакетных преобразований командной строки и очень быстро.