Может ли XSLT выполнить сценарий оболочки на уровне операционной системы?
У меня есть производственный процесс, который объединяет XSLT и несколько сценариев оболочки примерно за 4 шага до его завершения. Я выполняю каждый шаг вручную в данный момент.
Я использую Saxon 9 из командной строки в Linux. Могу ли я иметь сценарии оболочки XSL для выполнения... вместо меня?
(Я знаю, что мог бы достичь желаемого результата другим способом с помощью Ant или Make... но предпочел бы остаться в XSLT, если это не требует больших усилий)
Обновление: я свернул свои сценарии оболочки и ускорил работу с помощью Xproc. Я не совсем доволен результатом, но Xproc улучшил жизнь. Предложение Кая, представленное ниже, выглядит хорошо... но я еще не пробовал.
2 ответа
Вы можете вызвать java.lang.Runtime.exec() так же, как и любую другую внешнюю функцию Java.
Я тоже не разбираюсь в Java, но с помощью уроков Майкла Кея на сайте Saxonica я обнаружил, что это выполнимо.
Вот что я сделал, и что работает хорошо для меня: в корневом элементе таблицы стилей XSLT я назначил пространство имен для функции (в моем случае я использую его для разархивирования, поэтому я назвал префикс unzip, но это, безусловно, может быть что-нибудь):
xmlns:unzip="java:java.lang.Runtime"
Я определяю переменную с путем к файлу для пакетного файла, который будет вызван позже. Тогда я использую
<xsl:result-document href="{$batchFile}" method="text"> ... </result document>
создать командный файл. (Разархивирование можно, конечно, выполнить только с помощью команды, но я обнаружил, что версия пакетного файла более удобна, поскольку мне нужно было объединить команду unzip с некоторой командой изменения каталога и другими мелочами. И, кроме того, использование пакетного файла открывает мир более сложные задачи, которые можно было бы вызвать из листа XSLT.)
Когда мне нужно выполнить мой командный файл, я вставляю сообщение xsl: вот так:
<xsl:message>Executing <xsl:value-of select="unzip:exec(unzip:getRuntime(),concat('cmd /c /y start ',$batchFile))"/></xsl:message>
Надеюсь, что помогает, с наилучшими пожеланиями, Кай