2

XML で出力を生成する XSLT スタイルシートがあります。その出力を別のスタイルシートで処理したい。後者のスタイルシートに前者の結果を「実行して使用する」ように指示する方法はありますか?

4

2 に答える 2

2

私の知る限り、特定の入力に対して別のスタイルシートを実行し、出力に対して何かを行うように XSLT プロセッサに指示する標準的な方法はありません。場合によっては、1 つのテンプレート セットに対して入力を処理し、結果を変数に保存してから、次のように別のテンプレート セットを変数の値に適用できます。

<xsl:template match="/">
  <xsl:variable name="temp">
    <xsl:apply-templates mode="first-pass"/>
  </xsl:variable>
  <xsl:apply-templates select="$temp" mode="second-pass"/>
</xsl:template>

これは、XSLT 2.0 を実行していることを前提としています。XSLT 1.0 では、node-set 拡張機能をサポートするプロセッサが必要になり (多くの場合)、$temp への参照を exslt:nodeset($temp) のようなものに変更する必要があります。

お気づきのように、2 つのスタイルシートの両方がデフォルト モードを使用し、重複する要素タイプのセットを操作する場合、これはうまく機能しません。そのため、一部の XSLT プロセッサは拡張機能を追加して、説明した機能を提供しています (たとえば、Xalan pipe:pipeDocument 拡張要素の説明を参照してください)。

もちろん、XSLT の外でパイプを処理することもできます。最も簡単な方法は、実行している環境によって異なります。

オペレーティング システムのシェルから XSLT を実行していて、XSLT プロセッサが stdin で入力を受け入れる場合は、1 つのスタイルシートから別のスタイルシートに出力をパイプできます。

xsltproc a.xsl in.xml | xsltproc b.xsl - > out.xml

Mohammed moh がすでに指摘しているように、多くのスクリプト環境で同様のことが可能になっています。彼は PHP について言及しており、もちろん XProc もあります。

于 2013-02-07T01:36:26.137 に答える
0

はい、できます。ソース ノードを DOMDocument I don't Know What is your Programming Language に変換する必要があります。たとえば、php の場合は、DOMDocument 出力で新しい XSLT スタイルシートを実行できる変換後のtransformToDoc()です。

于 2013-02-06T22:22:42.280 に答える