Это не поможет вам по всей вероятности. Но я поделюсь своим опытом.
Я относился к XSLT только вчера, когда у меня возникла та же проблема, пытаясь выяснить, что в спецификации XSLT говорится w.r.t. разбор. Чтобы помочь себе, я добавил пару функций (xsl: template's, чтобы быть педантичными) в исходный XSL.
Затем я запустил его через браузер, и вот, у меня была четкая картина 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 (при обработке корневого узла), чтобы все выглядело хорошо. И это сделало мой день :)