xsl:apply-imports Элемент xsl:apply-imports
используется в шаблонах для применения правил, которые были импортированы во внешних модулях, но переопределены шаблонами основного преобразования.
Синтаксис Описание и примеры При обработке стиля в каждой точке имеется некое текущее правило шаблона. Всякий раз, когда по образцу выбирается правило шаблона, для обработки оно становится текущим правилом шаблона. Когда обрабатывается элемент xsl:for-each
, то при обработке содержимого этого элемента xsl:for-each
текущее правило шаблона становится нулевым.
xsl:apply-imports
обрабатывает текущий узел используя лишь те правила шаблона, которые были импортированы в тот элемент стиля, где это текущее правило шаблона находится. Узел обрабатывается в режиме текущего правила шаблона. Если xsl:apply-imports
обрабатывается когда текущее правило шаблона нулевое, фиксируется ошибка.
Пример 1 Предположим что стиль doc.xsl
содержит правило шаблона для элементов example
:
<xsl:template match= "example" >
<pre>
<xsl:apply-templates />
</pre>
</xsl:template>
Другой стиль может импортировать doc.xsl
и поменять обработку элементов example
следующим образом:
<xsl:stylesheet
version= "1.0"
xmlns:xsl= "http://www.w3.org/1999/XSL/Transform"
>
<xsl:import href= "doc.xsl" />
<xsl:template match= "example" >
<div style= "border: solid red" >
<xsl:apply-imports />
</div>
</xsl:template>
</xsl:stylesheet>
В результате суммарного действия example
должен преобразовываться в элемент следующего вида:
<div style= "border: solid red" >
<pre> ...</pre>
</div>
Пример 2 Предположим, что в преобразованиях часто используется шаблон, который заменяет элементы home
ссылками на сайт http://www.xsltdev.ru
:
<xsl:template match= "home" >
<a href= "http://www.xsltdev.ru/" > www.xsltdev.ru</a>
</xsl:template>
При необходимости этот шаблон может быть переопределен. К примеру, ссылка может выглядеть так: Visit <a href="https://www.xsltdev.ru/">www.xsltdev.ru</a>
. Соответственно, шаблон будет иметь вид:
<xsl:template match= "home" >
<xsl:text> Visit</xsl:text>
<a href= "https://www.xsltdev.ru/" > www.xsltdev.ru</a>
</xsl:template>
Можно заметить, что оба шаблона имеют общую часть, которая выводит гипертекстовую ссылку. Эта часть может быть выведена во внешнее преобразование home.xsl
:
<xsl:stylesheet
version= "1.0"
xmlns:xsl= "http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match= "home" >
<a href= "https://www.xsltdev.ru/" > www.xsltdev.ru</a>
</xsl:template>
</xsl:stylesheet>
Для того чтобы использовать внешний шаблон, основное преобразование должно импортировать его при помощи xsl:import
и применять посредством xsl:apply-imports
:
<xsl:stylesheet
version= "1.0"
xmlns:xsl= "http://www.w3.org/1999/XSL/Transform"
>
<xsl:import href= "home.xsl" />
<xsl:template match= "home" >
<xsl:text> Visit</xsl:text>
<xsl:apply-imports />
</xsl:template>
</xsl:stylesheet>
В XSLT 2.0 элемент <xsl:apply-imports>
может содержать нуль или более элементов <xsl:with-param>
для передачи параметров импортированному шаблону. Лишние параметры, передаваемые импортируемому шаблону, игнорируются. Но если импортированному шаблону не передается обязательный параметр, процессор XSLT выдает ошибку.
Пример 3 Пример 4 XML sample.xsl sample-import.xsl Результат
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143 <?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
<catalog>
<book id= "bk101" >
<title> XML Developer's Guide</title>
<author> Gambardella, Matthew</author>
<genre> Computer</genre>
<price> 44.95</price>
<publish_date> 2000-10-01</publish_date>
<description>
An in-depth look at creating applications with XML.
</description>
</book>
<book id= "bk102" >
<title> Midnight Rain</title>
<author> Ralls, Kim</author>
<genre> Fantasy</genre>
<price> 5.95</price>
<publish_date> 2000-12-16</publish_date>
<description>
A former architect battles corporate zombies, an evil
sorceress, and her own childhood to become queen of
the world.
</description>
</book>
<book id= "bk103" >
<title> Maeve Ascendant</title>
<author> Corets, Eva</author>
<genre> Fantasy</genre>
<price> 5.95</price>
<publish_date> 2000-11-17</publish_date>
<description>
After the collapse of a nanotechnology society in
England, the young survivors lay the foundation for a
new society.
</description>
</book>
<book id= "bk104" >
<title> Oberon's Legacy</title>
<author> Corets, Eva</author>
<genre> Fantasy</genre>
<price> 5.95</price>
<publish_date> 2001-03-10</publish_date>
<description>
In post-apocalypse England, the mysterious agent known
only as Oberon helps to create a new life for the
inhabitants of London. Sequel to Maeve Ascendant.
</description>
</book>
<book id= "bk105" >
<title> The Sundered Grail</title>
<author> Corets, Eva</author>
<genre> Fantasy</genre>
<price> 5.95</price>
<publish_date> 2001-09-10</publish_date>
<description>
The two daughters of Maeve, half-sisters, battle one
another for control of England. Sequel to Oberon's
Legacy.
</description>
</book>
<book id= "bk106" >
<title> Lover Birds</title>
<author> Randall, Cynthia</author>
<genre> Romance</genre>
<price> 4.95</price>
<publish_date> 2000-09-02</publish_date>
<description>
When Carla meets Paul at an ornithology conference,
tempers fly as feathers get ruffled.
</description>
</book>
<book id= "bk107" >
<title> Splish Splash</title>
<author> Thurman, Paula</author>
<genre> Romance</genre>
<price> 4.95</price>
<publish_date> 2000-11-02</publish_date>
<description>
A deep sea diver finds true love twenty thousand
leagues beneath the sea.
</description>
</book>
<book id= "bk108" >
<title> Creepy Crawlies</title>
<author> Knorr, Stefan</author>
<genre> Horror</genre>
<price> 4.95</price>
<publish_date> 2000-12-06</publish_date>
<description>
An anthology of horror stories about roaches,
centipedes, scorpions and other insects.
</description>
</book>
<book id= "bk109" >
<title> Paradox Lost</title>
<author> Kress, Peter</author>
<genre> Science Fiction</genre>
<price> 6.95</price>
<publish_date> 2000-11-02</publish_date>
<description>
After an inadvertant trip through a Heisenberg
Uncertainty Device, James Salway discovers the
problems of being quantum.
</description>
</book>
<book id= "bk110" >
<title> Microsoft .NET: The Programming Bible</title>
<author> O'Brien, Tim</author>
<genre> Computer</genre>
<price> 36.95</price>
<publish_date> 2000-12-09</publish_date>
<description>
Microsoft's .NET initiative is explored in detail in
this deep programmer's reference.
</description>
</book>
<book id= "bk111" >
<title> MSXML3: A Comprehensive Guide</title>
<author> O'Brien, Tim</author>
<genre> Computer</genre>
<price> 36.95</price>
<publish_date> 2000-12-01</publish_date>
<description>
The Microsoft MSXML3 parser is covered in detail, with
attention to XML DOM interfaces, XSLT processing, SAX
and more.
</description>
</book>
<book id= "bk112" >
<title> Visual Studio 7: A Comprehensive Guide</title>
<author> Galos, Mike</author>
<genre> Computer</genre>
<price> 49.95</price>
<publish_date> 2001-04-16</publish_date>
<description>
Microsoft Visual Studio 7 is explored in depth,
looking at how Visual Basic, Visual C++, C#, and ASP+
are integrated into a comprehensive development
environment.
</description>
</book>
</catalog>
1
2
3
4
5
6
7
8
9
10
11
12
13 <?xml version="1.0" ?>
<xsl:stylesheet
xmlns:xsl= "http://www.w3.org/1999/XSL/Transform"
version= "1.0"
>
<xsl:import href= "sample-import.xsl" />
<xsl:output method= "html" />
<xsl:template match= "book" >
<font face= "Arial" >
<xsl:apply-imports />
</font>
</xsl:template>
</xsl:stylesheet>
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 <?xml version="1.0" ?>
<xsl:stylesheet
xmlns:xsl= "http://www.w3.org/1999/XSL/Transform"
version= "1.0"
>
<!-- Override built-in template. -->
<xsl:template match= "text()" />
<xsl:template match= "/" >
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match= "book" >
<i>
<xsl:apply-templates select= "title" />
</i>
<xsl:text> By:</xsl:text>
<xsl:apply-templates select= "author" />
<br />
</xsl:template>
<xsl:template match= "title" >
<b>
<xsl:value-of select= "." />
</b>
</xsl:template>
<xsl:template match= "author" >
<font color= "blue" >
<xsl:value-of select= "." />
</font>
</xsl:template>
</xsl:stylesheet>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 < html >
< body >
< font face = "Arial"
>< i >< b > XML Developer's Guide</ b ></ i > By:
< font color = "blue" > Gambardella, Matthew</ font >< br
/></ font >
< font face = "Arial"
>< i >< b > Midnight Rain</ b ></ i > By:
< font color = "blue" > Ralls, Kim</ font >< br
/></ font >
...
< font face = "Arial"
>< i >< b > Visual Studio 7: A Comprehensive Guide</ b ></ i >
By: < font color = "blue" > Galos, Mike</ font >< br
/></ font >
</ body >
</ html >
См. также Ссылки