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

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

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

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠΉ ситуации ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использованиС процСссора совмСстно с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с процСссором Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ DOM-структур, Π½ΠΎ сами Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ ΠΈ выводят Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΌΠΎΠ³ΡƒΡ‚ спокойным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² элСмСнтС xsl:output ΠΈΠ»ΠΈ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… disable-output-escaping Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов прСобразования. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Ρ‚Π°ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти значСния Π½Π΅ ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ процСсса прСобразования ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ β€” ΠΎΠ½ΠΈ относятся ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ процСссор Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚.

ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄: Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ чСрСсчур Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ возмоТностями xsl:output ΠΈ disable-output-escaping.

Π—Π°ΠΌΠ΅Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов

Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Π² XML Π΅ΡΡ‚ΡŒ нСсколько ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ процСссором ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ встроСнныС сущности. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ Π±Ρ‹Π» ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, процСссор обязан Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ символы "<" ΠΈ "&" Π½Π° встроСнныС (&lt; ΠΈ &amp;) ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ (&#60; ΠΈ &#38;) сущности.

ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ довольно часто Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² выходящСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ символы Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ.

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

ΠŸΡƒΡΡ‚ΡŒ входящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ содСрТит описаниС Ρ‚ΠΎΠ²Π°Ρ€Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π² сСкции CDATA:

<?xml version="1.0" encoding="utf-8"?>

<product>

 <title>An elephant</title>

 <description><![CDATA[This is a <em>big</em> and <b>grey</b> animal!]]></description>

</product>

Если ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ этот Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с использованиСм шаблона

<xsl:template match="product">

 

  <xsl:value-of select="title"/><xsl:text>&#xA;</xsl:text><br/>

  <xsl:value-of select="description"/>

</xsl:template>

Ρ‚ΠΎ Π² выходящСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹:

An elephant

<br/>This is a &lt;em&gt;big&lt;/em&gt; and &lt;b&gt;grey&lt;/b&gt; animal!

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ disable-output-escaping (ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ символов) элСмСнтов xsl:value-of ΠΈ xsl:text. Π­Ρ‚ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния "yes" ΠΈ "no" ("no" β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ "yes" ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ процСссор ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ тСкста, создаваСмого xsl:text ΠΈΠ»ΠΈ xsl:value-of Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы. Если Π±Ρ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ использовали ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.

Листинг 8.56. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, содСрТащСС disable-output-escaping

<xsl:stylesheet version="1.0"

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


 <xsl:output indent="yes" method="xml"/>


 <xsl:template match="product">

 

   <xsl:value-of select="title"/><xsl:text>&#xA;</xsl:text><br/>

   <xsl:value-of disable-output-escaping="yes" select="description"/>

 

 </xsl:template>


</xsl:stylesheet>

Ρ‚ΠΎ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΌΡ‹ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

<?xml version="1.0" encoding="utf-8"?>

An elephant

<br/>This is a <em>big</em> and <b>grey</b> animal!

Атрибут disable-output-escaping Π½Π°Π»Π°Π³Π°Π΅Ρ‚ ряд ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° использованиС тСкстовых ΡƒΠ·Π»ΠΎΠ², Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтами xsl:text ΠΈ xsl:value-of: эти ΡƒΠ·Π»Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² качСствС тСкстового содСрТимого Π² ΡƒΠ·Π»Ρ‹ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΈΠ»ΠΈ инструкций ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π΅Ρ€Π΅Π²ΠΎ, содСрТащСС тСкстовыС ΡƒΠ·Π»Ρ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»Π° ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½Π° Π·Π°ΠΌΠ΅Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ ΠΊ строкС ΠΈΠ»ΠΈ числу. И Π² Ρ‚ΠΎΠΌ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС процСссор ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈΠ±ΠΎ Π²Ρ‹Π΄Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ прСобразования, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½Ρƒ Π·Π°ΠΌΠ΅Π½Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов.

Атрибут disable-output-escaping ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ смоТСт ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ символов Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ сам Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс Π²Ρ‹Π²ΠΎΠ΄Π°. Как ΠΌΡ‹ ΡƒΠΆΠ΅ обсуТдали Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ситуации, ΠΊΠΎΠ³Π΄Π° процСсс Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ самим процСссором, Π½Π΅ такая ΡƒΠΆ ΠΈ Ρ€Π΅Π΄ΠΊΠΎΡΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ disable-output-escaping Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π½Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° имССтся полная ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Атрибут disable-output-escaping Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° "xml" ΠΈ "html", Π½ΠΎ Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ влияния Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ "text", ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ всС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы ΠΈ Ρ‚Π°ΠΊ выводятся Π±Π΅Π· Π·Π°ΠΌΠ΅Π½Ρ‹.

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² XSLT-прСобразованиях

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² логичСских Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ XSLT, тСкстовыС ΡƒΠ·Π»Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode, ΠΎΡ‡Π΅Π½ΡŒ часто Π² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ русскоязычных Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² хранятся Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… Windows-1251 ΠΈ KOI8-R.

Если Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ ΠΊ прСобразованиям, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² Π½ΠΈΡ… ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‚Ρ€ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° β€” входящий (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ) Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ прСобразования (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ) ΠΈ выходящий (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚). БоотвСтствСнно, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ.

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° входящСго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° указываСтся Π² Π΅Π³ΠΎ xml-Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ. НапримСр, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Windows-1251 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ xml-Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡŽ Π²ΠΈΠ΄Π°

<?xml version="1.0" encoding="windows-1251"?>

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, нСбольшим ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠΌ окаТСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² соотвСтствии со стандартом XML, ΠΈΠΌΠ΅Π½Π° Ρ‚Π΅Π³ΠΎΠ² вовсС Π½Π΅ обязаны ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ· латинских Π±ΡƒΠΊΠ². Π’ ΠΈΠΌΠ΅Π½ΠΈ элСмСнта ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСсь кирилличСский Π°Π»Ρ„Π°Π²ΠΈΡ‚, Π° Ρ‚Π°ΠΊΠΆΠ΅ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… символов. Π‘ΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

<?xml version="1.0" encoding="windows-1251"?>

<страница>

 <содСрТимоС/>

</страница>

Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρƒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Ρ‹ символов ΠΈ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π² самих прСобразованиях, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

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

<?xml version="1.0" encoding="windows-1251"?>

<ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ>

 <ΠΎΡ…ΠΎΡ‚Π½ΠΈΠΊ>

  <ΠΆΠ΅Π»Π°Π΅Ρ‚>

   <Π·Π½Π°Ρ‚ΡŒ>

    <Π³Π΄Π΅>

     <сидит>

      <Ρ„Π°Π·Π°Π½/>

     </сидит>

    </Π³Π΄Π΅>

   </Π·Π½Π°Ρ‚ΡŒ>

  </ΠΆΠ΅Π»Π°Π΅Ρ‚>

 </ΠΎΡ…ΠΎΡ‚Π½ΠΈΠΊ>

</ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ>

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

<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet

 version="1.0"

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

 <xsl:output indent="yes" encoding="windows-1251"/>


 <xsl:template match="ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ">

  <Ρ€Π΅Π΄ΠΊΠΈΠΉ>

   <xsl:apply-templates/>

  </Ρ€Π΅Π΄ΠΊΠΈΠΉ>

 </xsl:template>


 <xsl:template match="ΠΎΡ…ΠΎΡ‚Π½ΠΈΠΊ">

  <Ρ€Ρ‹Π±ΠΎΠ»ΠΎΠ²>

   <xsl:apply-templates/>

  </Ρ€Ρ‹Π±ΠΎΠ»ΠΎΠ²>

 </xsl:template>


 <xsl:template match="ΠΆΠ΅Π»Π°Π΅Ρ‚/Π·Π½Π°Ρ‚ΡŒ">

  <ΠΌΠΎΠΆΠ΅Ρ‚>

   <Π·Π°Π±Ρ‹Ρ‚ΡŒ>

    <xsl:apply-templates/>

   </Π·Π°Π±Ρ‹Ρ‚ΡŒ>

  </ΠΌΠΎΠΆΠ΅Ρ‚>

 </xsl:template>


 <xsl:template match="Π³Π΄Π΅">

  <ΠΊΠ°ΠΊ>

   <xsl:apply-templates/>

  </ΠΊΠ°ΠΊ>

 </xsl:template>


 <xsl:template match="сидит">

  <ΠΏΠ»Π°Π²Π°Π΅Ρ‚>

   <xsl:apply-templates/>

  </ΠΏΠ»Π°Π²Π°Π΅Ρ‚>

 </xsl:template>


 <xsl:template match="Ρ„Π°Π·Π°Π½">

  <Ρ‰ΡƒΠΊΠ°>

   <xsl:apply-templates/>

  </Ρ‰ΡƒΠΊΠ°>

 </xsl:template>

</xsl:stylesheet>

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

<?xml version="1.0" encoding="windows-1251"?>

<Ρ€Π΅Π΄ΠΊΠΈΠΉ>

 <Ρ€Ρ‹Π±ΠΎΠ»ΠΎΠ²>

  <ΠΌΠΎΠΆΠ΅Ρ‚>

   <Π·Π°Π±Ρ‹Ρ‚ΡŒ>

    <ΠΊΠ°ΠΊ>

     <ΠΏΠ»Π°Π²Π°Π΅Ρ‚>

      <Ρ‰ΡƒΠΊΠ°/>

     </ΠΏΠ»Π°Π²Π°Π΅Ρ‚>

    </ΠΊΠ°ΠΊ>

   </Π·Π°Π±Ρ‹Ρ‚ΡŒ>

  </ΠΌΠΎΠΆΠ΅Ρ‚>

 </Ρ€Ρ‹Π±ΠΎΠ»ΠΎΠ²>

</Ρ€Π΅Π΄ΠΊΠΈΠΉ>

Напомним, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° выходящСго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° опрСдСляСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ encoding элСмСнта xsl:output ΠΈ Π½Π΅ зависит ΠΎΡ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ прСобразования ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ входящСго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ с элСмСнтом xsl:output, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π½Π°Π±ΠΎΡ€ символов.

Листинг 8.60. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° KOI8-R

<xsl:stylesheet version="1.0"

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

 <xsl:output encoding="KOI8-R"/>