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

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

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

Π’Ρ€ΠΈ шага этого прСобразования продСмонстрированы Π½Π° рис. 5.1.

Рис. 5.1. ΠŸΡ€ΠΎΡ†Π΅ΡΡ прСобразования

Π—Π΄Π΅ΡΡŒ слСва ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ список ΡƒΠ·Π»ΠΎΠ², посСрСдинС β€” Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° с Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ΠΈΡ€ΠΎΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ, справа β€” Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ выходящСС Π΄Π΅Ρ€Π΅Π²ΠΎ.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этого прСобразования Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚:

<b>text</b>

Рассмотрим Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°:

<para>

 <bold>text1</bold>

 <para>

  <bold>text2</bold>

 </para>

</para>

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ дСйствий Π² этом случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ.

β–‘ ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ обрабатываСтся ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π». ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ примСняСт ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΡƒΠ·Π»Π°ΠΌ (Π²Π΅Ρ€Π½Π΅Π΅ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ ΡƒΠ·Π»Ρƒ β€” элСмСнту para).

β–‘ Π¨Π°Π±Π»ΠΎΠ½, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ элСмСнт para, создаСт Π² выходящСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ элСмСнт p ΠΈ примСняСт ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊ своим Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΡƒΠ·Π»Π°ΠΌ β€” Π½Π° этот Ρ€Π°Π· ΠΈΡ… Π΄Π²Π°, bold ΠΈ para.

β–‘ Π¨Π°Π±Π»ΠΎΠ½, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ элСмСнт bold, создаСт Π² выходящСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ элСмСнт b ΠΈ тСкстовый ΡƒΠ·Π΅Π» со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ "text1".

β–‘ Π¨Π°Π±Π»ΠΎΠ½, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ элСмСнт para, создаСт Π² выходящСм Π΄Π΅Ρ€Π΅Π²Π΅ ΡƒΠ·Π΅Π» p ΠΈ примСняСт ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΡƒΠ·Π»Π°ΠΌ.

β–‘ Π•динствСнным Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ элСмСнта para являСтся элСмСнт bold.

β–‘ Π¨Π°Π±Π»ΠΎΠ½, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ этот элСмСнт bold, создаСт Π² выходящСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ элСмСнт b ΠΈ тСкстовый ΡƒΠ·Π΅Π» со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ "text2".

ΠŸΡ€ΠΎΡ†Π΅ΡΡ прСобразования ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 5.2.

Рис. 5.2. ΠŸΡ€ΠΎΡ†Π΅ΡΡ прСобразования

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этого прСобразования Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚:

 <b>text1</b>

 

  <b>text2</b>

 

Атрибут select элСмСнта xsl:apply-templates позволяСт Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡƒΠ·Π»Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ этот шаблон. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ select β€” это XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ мноТСство ΡƒΠ·Π»ΠΎΠ². Π’ случаС, Ссли Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ select ΡƒΠΊΠ°Π·Π°Π½, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· ΡƒΠ·Π»ΠΎΠ² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ мноТСства.

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

Если ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ элСмСнтов para ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты bold ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, шаблон ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ элСмСнтов para Π±ΡƒΠ΄Π΅Ρ‚ записан ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<xsl:template match="para">

 

<xsl:apply-templates select="bold"/>

</xsl:template>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

<para>

 <bold>text1</bold>

 <para>

  <bold>text2</bold>

 </para>

</para>

Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ

 <b>text1</b>

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ para, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎ входящСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ элСмСнт para, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΏΠΎ Ρ‚ΠΎΠΉ простой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ вошСл Π²ΠΎ мноТСство, Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ "bold". Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, Ссли ΠΌΡ‹ запишСм

<xsl:template match="para">

 

<xsl:apply-templates select="bold|para"/>

</xsl:template>

Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅:

 <b>text1</b>

 

  <b>text2</b>

 

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ select элСмСнта xsl:apply-templates ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ match элСмСнта xsl:template. Атрибут match содСрТит Π½Π΅ XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ XSLT; Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° select Π² xsl:apply-templates ΠΎΠ½ Π½Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ мноТСства ΡƒΠ·Π»ΠΎΠ², ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ этим шаблоном ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Атрибут select элСмСнта xsl:apply-templates Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, содСрТит Π½Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, СдинствСнным Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ мноТСство ΡƒΠ·Π»ΠΎΠ². НапримСр, Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π°

<xsl:apply-templates select="para+1"/>

ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ para+1 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ мноТСство ΡƒΠ·Π»ΠΎΠ².

ΠšΡ€ΠΎΠΌΠ΅ этого трСбования, Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° выраТСния Π² этом Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ Π½Π΅Ρ‚. Π’ Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, содСрТащиС мноТСства ΡƒΠ·Π»ΠΎΠ², Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ мноТСства ΡƒΠ·Π»ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ id ΠΈΠ»ΠΈ key), выраТСния с опСрациями Π½Π°Π΄ мноТСствами (ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ объСдинСния Π±Ρ‹Π»ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ bold|para), ΠΏΡƒΡ‚ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠ΅ выраТСния, Π² ΠΎΠ±Ρ‰Π΅ΠΌ, Π»ΡŽΠ±Ρ‹Π΅ выраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ мноТСства. НапримСр, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ содСрТимоС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ внСшнСго XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ select элСмСнта xsl:apply-template слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ document.

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

ОбъявлСниС вида

<xsl:apply-templates select="document('a.xml')//para"/>

ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎ всСм элСмСнтам para Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° a.xml.

Π Π΅ΠΆΠΈΠΌΡ‹

ΠžΡ‡Π΅Π½ΡŒ часто Π² прСобразованиях трСбуСтся ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΡƒΠ·Π»Ρ‹, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π·Π°Π΄Π°Ρ‡ΠΈ являСтся гСнСрация оглавлСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° вмСстС с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ содСрТимого. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ просто шаблонами здСсь Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅ΡΡ‚ΠΈΡΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π² XSLT просто ΠΈ элСгантно. Атрибут mode элСмСнта xsl:template Π·Π°Π΄Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ этого шаблона. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΅ΡΡ‚ΡŒ Ρƒ элСмСнта xsl:apply-templates: Π² этом элСмСнтС ΠΎΠ½ устанавливаСт Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ xsl:apply-templates процСссор Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ прСобразования, Ρ€Π΅ΠΆΠΈΠΌ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… совпадаСт с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

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

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ добавляСт Π² XHTML-Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ тСкстовых ссылок, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π² этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅. Π“Ρ€ΡƒΠ±ΠΎ говоря, XHTML β€” это XML-вСрсия языка HTML, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ XSLT Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ XHTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

URI пространства ΠΈΠΌΠ΅Π½ языка XHTML β€” "http://www.w3.org/1999/xhtml"; этому языку ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΠΌ прСфикс "xhtml" ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сдСлаСм это пространство пространством ΠΈΠΌΠ΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

<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:stylesheet>

НачнСм с шаблона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· ссылок. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ссылкС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ href ΠΈ тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° содСрТит. Для удобочитаСмости ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ элСмСнт br ΠΈ символ пСрСноса строки &#xA;.

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

 <xsl:copy>

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

 </xsl:copy>

 <br/>

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

</xsl:template>

ΠœΡ‹ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ познакомимся с элСмСнтами xsl:copy, xsl:copy-of ΠΈ xsl:text, ΠΏΠΎΠΊΠ° ΠΆΠ΅ скаТСм, Ρ‡Ρ‚ΠΎ

<xsl:copy>

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

</xsl:copy>

ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² выходящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π», Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ href (@href) ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ тСкстовыС ΡƒΠ·Π»Ρ‹ (text()).

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ <xsl:text>&#xA;</xsl:text> Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ символ пСрСноса строки. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ <br/> являСтся Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° β€” ΠΎΠ½ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ обрабатываСтся, Π° просто выводится Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ называСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ β€” ΠΎΠ½ΠΎ просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ всС ΡƒΠ·Π»Ρ‹ ΠΎΠ΄ΠΈΠ½ Π² ΠΎΠ΄ΠΈΠ½:

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

 <xsl:copy>

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

 </xsl:copy>

</xsl:template>

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π½Π°ΠΌ понадобится ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ для элСмСнта body β€” Π² Π½Π΅Π³ΠΎ ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ копию содСрТимого, Π° Ρ‚Π°ΠΊΠΆΠ΅ ссылки, отсортированныС Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС:

<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>

Если ΠΌΡ‹ попытаСмся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, состоящСС ΠΈΠ· этих шаблонов, ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² тСкстС самого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ссылки ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΠ»ΠΈΡΡŒ β€” Ρ‚Π°ΠΌ Ρ‚ΠΎΠΆΠ΅ добавились элСмСнты br ΠΈ пСрСносы строк. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ шаблон для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ссылок ΠΈΠΌΠ΅Π΅Ρ‚ больший ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Ρ‡Π΅ΠΌ шаблон, ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ содСрТимоС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Для исправлСния этой ошибки ΠΌΡ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ шаблон ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ссылок Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ links:

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

 ...

</xsl:template>

Π’Π΅ΠΏΠ΅Ρ€ΡŒ это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ ссылкам Π²ΠΎ врСмя копирования содСрТимого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ инструкции

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