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

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

  <xsl:copy>

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

  </xsl:copy>

 </xsl:template>

</xsl:stylesheet>

Как можно видеть, XSLT довольно гибко поддерживает кодировки — входящие и выходящие документы, а также сами преобразования могут иметь разные наборы символов. Единственным ограничением является множество кодировок, поддерживаемое самим процессором, вернее парсером, который он использует для разбора входящих документов, и сериализатором, который служит для создания физического экземпляра выходящего документа.

Практически во всех процессорах поддерживаются кодировки UTF-8, US- ASCII и ISO-8859-1, но далеко не все могут работать с Windows-1251 или KOI8-R. Поэтому, создавая документы и преобразования в нестандартных кодировках, мы заведомо ограничиваем переносимость решений. В случаях, когда XML/XSLT приложения создаются под конкретный процессор с заведомо известными возможностями, это не является большой проблемой, однако в тех случаях, когда требуется универсальность или точно не известно, каким процессором будет производиться обработка, единственным выходом будет использовать UTF-8 — как во входящих документах, так и в самих преобразованиях.

Случай нескольких входящих документов

Базовая архитектура преобразования подразумевает один входящий документ. Несмотря на это, в преобразованиях можно использовать и обрабатывать информацию, хранящуюся в других, внешних документах. Доступ к этим документам можно получить при помощи функции document.

Функция document

Запись функции:

node-set document (object, node-set?)

Функция document позволяет обращаться к внешним документам по их URI, например

<xsl:copy-of select='document('http://www.w3.org')'/>

скопирует в выходящий документ содержимое главной страницы Консорциума W3.

Вы читаете Технология XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату