2

XSLTといくつかのシェルスクリプトを、完成する前に約4ステップで組み合わせるプロダクションフローがあります。現在、各ステップを手動で実行しています。

LinuxのコマンドラインからSaxon9を使用しています。私の代わりにxslにシェルスクリプトを実行させることはできますか?

(AntまたはMakeを使用して別の方法で目的の結果を達成できることはわかっていますが、それほど大きな努力が必要でない場合は、XSLTにとどまる方を好みます)

更新:シェルスクリプトを最小化し、Xprocを使用して処理を高速化しました。結果に完全に満足しているわけではありませんが、Xprocの寿命は改善されています。以下のカイの提案は良さそうですが、私はまだ試していません。

4

2 に答える 2

5

私もJavaに精通していませんが、SaxonicaのWebサイトにあるMichael Kayのチュートリアルで実行可能であることがわかりました.

XSLT スタイルシートのルート要素で、関数の名前空間を割り当てました (私の場合、解凍に使用しているので、プレフィックスを unzip と名付けましたが、それは確かになんでも):

xmlns:unzip="java:java.lang.Runtime"

後で呼び出すバッチ ファイルのファイル パスを含む変数を定義しています。それから私は使用しています

<xsl:result-document href="{$batchFile}" method="text"> ... </result document> 

バッチファイルを作成します。(解凍は確かにコマンドだけで実行できますが、解凍コマンドをいくつかのディレクトリ変更コマンドやその他の小さなものと組み合わせる必要があったため、バッチ ファイル バージョンの方が便利であることがわかりました。さらに、バッチ ファイルを使用すると、さまざまな世界が開かれます。 XSLT シートから呼び出すことができる、より複雑なタスク)。

バッチ ファイルを実行する必要がある場合は、次のように xsl:message を挿入します。

<xsl:message>Executing <xsl:value-of select="unzip:exec(unzip:getRuntime(),concat('cmd /c /y start ',$batchFile))"/></xsl:message>

よろしくお願いします、カイ

于 2013-04-04T07:17:16.437 に答える
2

他の外部 Java 関数と同じ方法で java.lang.Runtime.exec() を呼び出すことができます。

于 2013-03-19T16:34:01.920 に答える