Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВСхнология XSLTΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 41

Автор АлСксСй Π’Π°Π»ΠΈΠΊΠΎΠ²

<xsl:apply-templates select="@*|node()"/>

Ρ€Π΅ΠΆΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ пустым, Π·Π½Π°Ρ‡ΠΈΡ‚ шаблон для xhtml:Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ xsl:apply-templates, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² этот элСмСнт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ mode:

<xsl:apply-templates

 select=".//xhtml:a[@href and not(xhtml:*)]"

 mode="links">

 <xsl:sort select="."/>

</xsl:apply-templates>

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Данная инструкция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ с Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ links ΠΊ ΡƒΠ·Π»Π°ΠΌ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ".//xhtml:a[@href and not (xhtml:*)]", отсортированным Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС своих строковых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ".//xhtml:a[@href and not(xhtml:*)]" Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всСх ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π° (ΠΏΡƒΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ".//"), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ пространству ΠΈΠΌΠ΅Π½ xhtml, ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнтами с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π°, (тСст ΠΈΠΌΠ΅Π½ΠΈ "xhtml:a"), ΠΏΡ€ΠΈ этом ΠΈΠΌΠ΅ΡŽΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ href ΠΈ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты (ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ "[@href and not (xhtml:*)]").

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄.

Листинг 5.4. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ссылок

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns:xhtml="http://www.w3.org/1999/xhtml"

 xmlns="http://www.w3.org/1999/xhtml">


 <xsl:template match="xhtml:body">

  <xsl:copy>

   <xsl:apply-templates select="@*|node()"/>

   <h1>Links found on this page:</h1>

   <xsl:apply-templates select=".//xhtml:a[@href and not (xhtml:*)]">

    <xsl:sort select="."/>

   </xsl:apply-templates>

  </xsl:copy>

 </xsl:template>


 <xsl:template match="@*|node()">

  <xsl:copy>

   <xsl:apply-templates select="@*|node()"/>

  </xsl:copy>

 </xsl:template>


 <xsl:template match="xhtml:a">

  <xsl:copy>

   <xsl:copy-of select="@href|text()"/>

  </xsl:copy>

  <br/>

  <xsl:text>&#xA;</xsl:text>

 </xsl:template>

</xsl:stylesheet>

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊ Π³Π»Π°Π²Π½ΠΎΠΉ страницС ΠšΠΎΠ½ΡΠΎΡ€Ρ†ΠΈΡƒΠΌΠ° W3 (http://www.w3.org), ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ всСх Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… тСкстовых ссылок. Выходящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π°:

<h1>Links found on this page:</h1>

<a href="Consortium/">About W3C</a><br/>

<a href="WAI/">Accessibility</a><br/>

<a href="Consortium/Activities">Activities</a><br/>

ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ эффСкта ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ способами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… шаблонов ΠΈΠ»ΠΈ элСмСнта xsl:for-each, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ², ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΎΠΉ.

Досадным ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅ΠΆΠΈΠΌ нСльзя Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ динамичСски. Атрибут mode обязан ΠΈΠΌΠ΅Ρ‚ΡŒ фиксированноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Π²ΠΈΠ΄Π°:

<xsl:apply-templates mode="{$mode}"/>

Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ. Особо ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… практичСских ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΠΉ для динамичСских Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² Π½Π΅Ρ‚, Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях XSLT ΠΎΠ½ΠΈ появятся.

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹

ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° match ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, какая Ρ‡Π°ΡΡ‚ΡŒ входящСго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌ шаблоном, Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ имя ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Π½Π΅ зависимости ΠΎΡ‚ контСкста прСобразования. Π’Π°ΠΊΠΈΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ схоТи ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ с ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ Π² ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… языках программирования β€” ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ части ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ обрабатываСтся Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Имя ΡˆΠ°Π±Π»ΠΎΠ½Π½ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ присваиваСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ name элСмСнта xsl:template. ПослС этого ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ match, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ просто ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π”Π²Π° шаблона с ΠΎΠ΄Π½ΠΈΠΌ порядком ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Если ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ порядка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ порядка ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ младшиС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ HTML-страниц часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΉΡΡ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ являСтся созданиС элСмСнта head. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ head, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, содСрТит нСсколько элСмСнтов meta, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, элСмСнт title, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт Π½Π°Π·Π²Π°Π½ΠΈΠ΅ страницы ΠΈ элСмСнт link, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связываСт Π΄Π°Π½Π½ΡƒΡŽ страницу с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с каскадными Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ стилСй (CSS).

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ head, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ вынСсти Π΅Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ шаблон.

Листинг 5.5. Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ шаблон для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ элСмСнта head

<xsl:template name="head">

 <head>

  <meta name="keywords" content="XSLT, XPath, XML"/>

  <meta name="description"

   content="This site is dedicated to XSLT and Xpath."/>

  <title>XSLTdev.ru - XSLT developer resource</title>

  <link rel="stylesheet" type="text/css" href="style/main.css"/>

 </head>

</xsl:template>

ДумаСтся, этот шаблон Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пояснСний β€” ΠΎΠ½ просто создаСт Π² входящСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ нСсколько элСмСнтов. НСпонятным ΠΏΠΎΠΊΠ° остаСтся Π΄Ρ€ΡƒΠ³ΠΎΠ΅ β€” ΠΊΠ°ΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹? Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ xsl:apply-templates явно Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π½Π΅ обязаны ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ match. Π˜Ρ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ производится элСмСнтом xsl:call-template.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ xsl:call-template

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ синтаксис этого элСмСнта:

<xsl:call-template

 name="имя">

 <!-- Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅: нСсколько элСмСнтов xsl:with-param -->

</xsl:call-template>

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ имя шаблона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся этой инструкциСй. НапримСр, шаблон с ΠΈΠΌΠ΅Π½Π΅ΠΌ "head", ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<xsl:call-template name="head"/>

Атрибут name ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ обязан ΠΈΠΌΠ΅Ρ‚ΡŒ фиксированноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² случаС с mode ΠΈ xsl:apply-templates, Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ° здСсь Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π°.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ xsl:call-template Π½Π΅ измСняСт контСкста прСобразования. ЀактичСски, Π²Ρ‹Π·ΠΎΠ² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ шаблона эквивалСнтСн Π·Π°ΠΌΠ΅Π½Π΅ Π² тСкстС прСобразования элСмСнта xsl:call-template Π½Π° Ρ‚Π΅Π»ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ шаблона.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Листинг 5.6. Входящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

<content>

 Just a few words...

</content>

Листинг 5.7. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:template match="/">

 <html>

  <xsl:call-template name="head"/>

  <body><xsl:copy-of select="content/node()"/></body>

 </html>

</xsl:template>


<xsl:template name="head">

 <head>

  <meta name="keywords" content="XSLT, XPath, XML"/>

  <meta name="description"

   content="This site is dedicated to XSLT and Xpath."/>

  <title>XSLTdev.ru - XSLT developer resource</title>

  <link rel="stylesheet" type="text/css" href="style/main.css"/>

 </head>

</xsl:template>


</xsl:stylesheet>

Листинг 5.8. Выходящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

<html>

 <head>

  <meta name="keywords" content="XSLT, XPath, XML">

  <meta name="description"

   content="This site is dedicated to XSLT and Xpath.">

  <title>XSLTdev.ru - XSLT developer resource</title>

  <link rel="stylesheet" type="text/css" href="style/main.css">

 </head>

 <body>Just a few words...</body>

</html>

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

НСсколько Π±ΠΎΠ»Π΅Π΅ эффСктивным способом использования Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ статичСских частСй (ΠΊΠ°ΠΊ содСрТимоС элСмСнта head Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅) являСтся Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ этих частСй Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΈ вставка ΠΈΡ… Π² выходящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ элСмСнта xsl:copy-of ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ document.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ шаблон, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт, фактичСски эквивалСнтСн ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ Π²ΠΈΠ΄Π°:

<xsl:template match="/">

 <html>

  <head>

   <meta name="keywords" content="XSLT, XPath, XML"/>

   <meta name="description"

    content="This site is dedicated to XSLT and Xpath."/>

   <title>XSLTdev.ru - XSLT developer resource</title>

   <link rel="stylesheet" type="text/css" href="style/main.css"/>

  </head>

  <body><xsl:value-of select="content"/></body>

 </html>

</xsl:template>

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π½Π΅ обязаны ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ match, Π½ΠΎ ΠΎΠ½ всС ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Π’ этом случаС шаблон ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ частСй Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² элСмСнтом xsl:apply-templates, Ρ‚Π°ΠΊ ΠΈ вызывая Π΅Π³ΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ элСмСнтом xsl:call-template.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ИзмСним объявлСниС нашСго шаблона head ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<xsl:template name="head" match="head">

 ...

</xsl:template>

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли входящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄

<page>