[1] xslt:apply-templates
要素は、特定の節集合の節それぞれについて雛形を適用し、
結果木中のこの要素に相当する位置に適用結果を接木するのに使います。
<http://www.w3.org/TR/xslt#element-apply-templates>
[2] 属性:
mode | QName | (なし) | モード |
select | 節集合式 | child::node() | 適用対象 |
内容には xslt:with-param
要素と xslt:sort
要素を零個以上使えます。
xslt:apply-templates
要素は雛形中の禁止されていない任意の位置で使えます。
[3] 例えば、
<doc> <sec> <h>Chapter 1</h> <p>Paragraph 1.1</p> <p>Paragraph 1.2</p> <sec> <h>Section 1.1</h> <p>Paragraph 1.1.1</p> <p>Paragraph 1.1.2 </sec> </sec> </doc>
という原始木に、
<xsl:template match="sec"> <list> <apply-templates match="child::node()"/> </list> </xsl:template> <xsl:template match="h"> <item>HEADING</item> </xsl:template> <xsl:template match="p"> <item>PARAGRAPH</item> </xsl:template>
というスタイル・シート片を適用したとすると、 結果木片は
<list> <item>HEADING</item> <item>PARAGRAPH</item> <item>PARAGRAPH</item> <list> <item>HEADING</item> <item>PARAGRAPH</item> <item>PARAGRAPH</item> </list> </list>
になります。
<xsl:template><apply-templates select="."/></xsl:template>
と書くだけで無限ループします。こんな単純なのなら処理系がループを認識して止まってくれるかもしれませんが、複雑な場合だとそうもいかないかもしれません。 ですから、 XSLT スタイル・シートが WorldWritable になっていると、 DoS 攻撃される虞があります。対策していない XSLT 処理系を使っているところでそういう危険なことをしてはいけません。