<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <code class="XSLTe"><var>xslt:</var><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">apply-templates</anchor></code>
要素は、特定の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節集合</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節</anchor>それぞれについて雛形を適用し、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">結果木</anchor>中のこの要素に相当する位置に適用結果を接木するのに使います。
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/xslt#element-apply-templates">http://www.w3.org/TR/xslt#element-apply-templates</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 属性:<table><tbody><tr><td><code class="XSLTa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mode</anchor></code></td><td><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">QName</anchor></td><td>(なし)</td><td><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">モード</anchor></td></tr><tr><td><code class="XSLTa"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">select</anchor></code></td><td><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節集合式</anchor></td><td><code class="XPath"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">child</anchor>::<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">node</anchor>()</code></td><td>適用対象</td></tr></tbody></table></p><p>内容には <code class="XSLTe"><var>xslt:</var><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">with-param</anchor></code>
要素と <code class="XSLTe"><var>xslt:</var><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">sort</anchor></code>
要素を零個以上使えます。</p><p><code class="XSLTe"><var>xslt:</var>apply-templates</code>
要素は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">雛形</anchor>中の禁止されていない任意の位置で使えます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 例えば、<pre>&lt;doc&gt;
  &lt;sec&gt;
     &lt;h&gt;Chapter 1&lt;/h&gt;
     &lt;p&gt;Paragraph 1.1&lt;/p&gt;
     &lt;p&gt;Paragraph 1.2&lt;/p&gt;
     &lt;sec&gt;
       &lt;h&gt;Section 1.1&lt;/h&gt;
       &lt;p&gt;Paragraph 1.1.1&lt;/p&gt;
       &lt;p&gt;Paragraph 1.1.2
     &lt;/sec&gt;
  &lt;/sec&gt;
&lt;/doc&gt;</pre></p><p>という原始木に、<pre><anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="xsl:template match=&quot;sec&quot;">xsl:template match=&quot;sec&quot;</anchor-external>
  &lt;list&gt;
    &lt;apply-templates match=&quot;child::node()&quot;/&gt;
  &lt;/list&gt;
&lt;/xsl:template&gt;
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="xsl:template match=&quot;h&quot;">xsl:template match=&quot;h&quot;</anchor-external>
  &lt;item&gt;HEADING&lt;/item&gt;
&lt;/xsl:template&gt;
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="xsl:template match=&quot;p&quot;">xsl:template match=&quot;p&quot;</anchor-external>
  &lt;item&gt;PARAGRAPH&lt;/item&gt;
&lt;/xsl:template&gt;</pre></p><p>というスタイル・シート片を適用したとすると、
結果木片は<pre>  &lt;list&gt;
    &lt;item&gt;HEADING&lt;/item&gt;
    &lt;item&gt;PARAGRAPH&lt;/item&gt;
    &lt;item&gt;PARAGRAPH&lt;/item&gt;
    &lt;list&gt;
      &lt;item&gt;HEADING&lt;/item&gt;
      &lt;item&gt;PARAGRAPH&lt;/item&gt;
      &lt;item&gt;PARAGRAPH&lt;/item&gt;
    &lt;/list&gt;
  &lt;/list&gt;</pre></p><p>になります。</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> select する節は、任意のもので構いません。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現在節</anchor>の子供である必要はありません。現在節自身ですら構いません。ですから、 <code class="XSLT"><anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="xsl:template">xsl:template</anchor-external>&lt;apply-templates select=&quot;.&quot;/&gt;&lt;/xsl:template&gt;</code> と書くだけで無限ループします。こんな単純なのなら処理系がループを認識して止まってくれるかもしれませんが、複雑な場合だとそうもいかないかもしれません。 ですから、 XSLT スタイル・シートが <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WorldWritable</anchor> になっていると、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DoS</anchor> 攻撃される虞があります。対策していない XSLT 処理系を使っているところでそういう危険なことをしてはいけません。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal> 処理系側の対策としては・・・同じ節についての同じ雛形の適用を百回とか千回とか適当な十分大きな回数したら異常終了するようにしとけばいいんじゃないですかねぇ。</li></ul></body></html>