Книга: Технология XSLT

Контекст вычисления выражений

Контекст вычисления выражений

Выражения всегда вычисляются в некотором контексте — окружении, которое зависит от того, какая часть документа обрабатывается XSLT-процессором в данный момент, и какие объявления присутствовали в самом преобразовании.

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

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

Пример

Для того чтобы показать, как изменяется контекст во время преобразования, мы напишем шаблон, который заменяет все элементы входящего документа элементами вида:

<element
 name="имя элемента"
 context-position="позиция в контексте"
 context-size="размер контекста"
 string-value="строковое значение">
 ...
</element>

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

<xsl:stylesheet
 version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output indent="yes"/>
 <xsl:strip-space elements="*"/>
 <xsl:template match="*">
  <element
   name="{name()}"
   context-position="{position()}"
   context-size="size()"
   string-value="{.}">
   <xsl:apply-templates select="*"/>
  </element>
 </xsl:template>
</xsl:stylesheet>

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

<data>
 <part>
  <item>A</item>
  <item>B</item>
  <item>C</item>
 </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>

Оглавление книги


Генерация: 1.118. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз