これはおそらくあなたを助けるつもりはありません。しかし、私は私の経験を共有します。
XSLT仕様が構文解析に関して何を言っているのかを理解しようとして同じ問題を抱えていたのは昨日だけでした。私が自分自身を助けるためにしたことは、元の XSL にいくつかの関数 (xsl:template の、ペダンティックにするため) を追加することでした。次に、ブラウザで実行したところ、ほら、DFS の全体像がはっきりとわかりました。
私は以下を作成しました:
<xsl:template name="print">
<xsl:param name="message"/>
<xsl:param name="elem"/>
<div class="ArticleBody">
<br/>
<xsl:value-of select="$message"/>: <xsl:value-of select="$elem"/> ... <br/>
</div>
テンプレートはprint
ワーカーで、プロローグとエピローグは単にprint
カスタム文字列で呼び出します。
そして、元の XSL ファイルを次のように変更します。
<xsl:template match="db:para">
<xsl:apply-templates/>
</xsl:template>
に:
<xsl:template match="db:para">
<xsl:call-template name="prologue">
<xsl:with-param name="item" select="'para'"/>
</xsl:call-template>
<xsl:apply-templates/>
<xsl:call-template name="epilogue">
<xsl:with-param name="item" select="'para'"/>
</xsl:call-template>
すべてのノードが処理されると、出力が得られます。
start-processing: article ...
そして完成したら
end-processing: article ...
見栄えを良くするために、(ルート ノードの処理時に) CSS も少し入れました。そして、それは私の一日を作りました:)