</part>

 <part>

  <value>D</value>

  <value>E</value>

  <value>F</value>

 </part>

</data>

Листинг 3.28. Выходящий документ

<element name='data'

 context-position='1' context-size='1' string-value='ABCDEF'>

 <element name='part'

  context-position='1' context-size='2' string-value='ABC'>

 <element name='item'

  context-position='1' context-size='3' string-value='A'/>

 <element name='item'

  context-position='2' context-size='3' string-value='B'/>

 <element name='item'

  context-position='3' context-size='3' string-value='C'/> </element>

 <element name='part'

  context-position='2' context-size='2' string-value='DEF'>

 <element name='value'

  context-position='1' context-size='3' string-value='D'/>

 <element name='value'

  context-position='2' context-size='3' string-value='E'/>

 <element name='value'

  context-position='3' context-size='3' string-value='F'/>

 </element>

</element>

Модель преобразования

Во вводной главе мы говорили, что преобразования в XSLT являются наборами шаблонных правил, каждое из которых обрабатывает определенный фрагмент входящего документа с тем, чтобы сгенерировать фрагмент выходящего документа.

Контекст преобразования

При выполнении преобразования каждая из его инструкций, каждый из элементов обрабатывается в некотором контексте. Контекст преобразования состоит из двух частей: из текущего множества узлов и из текущего узла, которые показывают, что именно обрабатывается в данный момент. XSLT-процессор поочередно обрабатывает каждый из узлов текущего множества (при этом делая этот узел текущим узлом) и объединяет результаты в одно дерево.

Контекст преобразования тесно связан с контекстом вычисления выражений:

□ текущий узел контекста преобразования соответствует контекстному узлу вычисления выражений;

□ позиция текущего узла в текущем обрабатываемом множестве соответствует позиции контекста вычисления выражений;

□ размер текущего множества узлов соответствует размеру контекста вычисления выражений.

Контекст преобразования может изменяться только двумя элементами — xsl:apply- templates и xsl:for-each. Каждый из этих элементов вычисляет множество узлов, которое становится текущим и затем обрабатывается. После этого контекст преобразования восстанавливается до того состояния, каким он был перед обработкой.

Изменения контекста могут быть продемонстрированы на следующем примере.

Листинг 3.29. Входящий документ

<summer>

 <month>June</month>

 <month>July</month>

 <month>August</month>

</summer>

Этому документу соответствует следующее дерево (рис. 3.19):

Рис. 3.19. Дерево входящего документа

Листинг 3.30. Преобразование

<xsl:stylesheet

 version='1.0'

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

 <xsl:template match='/'>

  <html>

   <head>

    <title>Summer</title>

   </head>

   <body>

    <xsl:apply-templates select='summer'/>

   </body>

  </html>

 </xsl:template>

 <xsl:template match='summer'>

  <table>

   <tr>

    <xsl:apply-templates select='month'/>

   </tr>

  </table>

 </xsl:template>

 <xsl:template match='month'>

  <td>

   <xsl:value-of select='.'/>

  </td>

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

0

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

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