-
Notifications
You must be signed in to change notification settings - Fork 4
/
329.txt
67 lines (58 loc) · 2.55 KB
/
329.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
[1] [CODE(XSLTe)[[VAR[xslt:]][[apply-templates]]]]
要素は、特定の[[節集合]]の[[節]]それぞれについて雛形を適用し、
[[結果木]]中のこの要素に相当する位置に適用結果を接木するのに使います。
<http://www.w3.org/TR/xslt#element-apply-templates>
[2] 属性:
,[CODE(XSLTa)[[[mode]]]] ,[[QName]] ,(なし) ,[[モード]]
,[CODE(XSLTa)[[[select]]]] ,[[節集合式]] ,[CODE(XPath)[[[child]]::[[node]]()]] ,適用対象
内容には [CODE(XSLTe)[[VAR[xslt:]][[with-param]]]]
要素と [CODE(XSLTe)[[VAR[xslt:]][[sort]]]]
要素を零個以上使えます。
[CODE(XSLTe)[[VAR[xslt:]]apply-templates]]
要素は[[雛形]]中の禁止されていない任意の位置で使えます。
[3] 例えば、
[PRE[
<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>
]PRE]
という原始木に、
[PRE[
<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>
]PRE]
というスタイル・シート片を適用したとすると、
結果木片は
[PRE[
<list>
<item>HEADING</item>
<item>PARAGRAPH</item>
<item>PARAGRAPH</item>
<list>
<item>HEADING</item>
<item>PARAGRAPH</item>
<item>PARAGRAPH</item>
</list>
</list>
]PRE]
になります。
- [4] select する節は、任意のもので構いません。[[現在節]]の子供である必要はありません。現在節自身ですら構いません。ですから、 [CODE(XSLT)[<xsl:template><apply-templates select="."/></xsl:template>]] と書くだけで無限ループします。こんな単純なのなら処理系がループを認識して止まってくれるかもしれませんが、複雑な場合だとそうもいかないかもしれません。 ですから、 XSLT スタイル・シートが [[WorldWritable]] になっていると、 [[DoS]] 攻撃される虞があります。対策していない XSLT 処理系を使っているところでそういう危険なことをしてはいけません。
- [6] >>4 処理系側の対策としては・・・同じ節についての同じ雛形の適用を百回とか千回とか適当な十分大きな回数したら異常終了するようにしとけばいいんじゃないですかねぇ。