Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

 <xsl:for-each select="items/item">

<option>

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

</option>

 </xsl:for-each>

</select>

Если в преобразовании нам понадобится доопределить входящий список кодами

RUS
и
UKR
, не исправляя входящий документ, можно поступить следующим образом:

□ создать в переменной фрагмент дерева, содержащий элементы

item
входящего документа плюс элементы
item
, доопределяющие этот список;

□ преобразовать дерево в список узлов;

□ обрабатывать список узлов точно так же, как мы бы обрабатывали сам входящий документ.

Преобразование, реализующее эти три шага, приведено ниже.

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

<xsl:stylesheet

 version="1.0"

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

 xmlns:xalan="http://xml.apache.org/xalan"

 exclude-result-prefixes="xalan">

 <xsl:template match="items">

<!--

| Создаем переменную tree, содержащую элементы item

| входящего документа а также два дополнительных элемента

+-->

<xsl:variable name="tree">

<xsl:copy-of select="item"/>

<item>RUS</item>

<item>UKR</item>

</xsl:variable>

<!--

| Конвертируем переменную tree во множество узлов,

| результат присваиваем переменной items

+-->

<xsl:variable name="items" select="xalan:nodeset($tree)"/>

<!--

| Обрабатываем узлы $items/item точно так же,

| как мы обрабатывали бы узлы items/item

+-->

<select name="language">

<xsl:for-each select="$items/item">

<option>

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

</option>

</xsl:for-each>

</select>

 </xsl:template>

</xsl:stylesheet>

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

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

<select name="language">

 <option>ENG</option>

 <option>FRE</option>

 <option>GER</option>

 <option>GRE</option>

 <option>ITA</option>

 <option>NOR</option>

 <option>POR</option>

 <option>SPA</option>

 <option>USA</option>

 <option>RUS</option>

 <option>UKR</option>

</select>

Вне всякого сомнения, функция

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

В качестве одного из примеров применения функции

nodeset
можно привести реализацию с ее помощью многошаговых преобразований.

В качестве примера рассмотрим схему трансформации, изображенную на рис. 10.3, в которой документ А сначала нужно обработать преобразованием 1, затем полученный результат (документ В) обработать преобразованием 2. Конечным результатом цепочки преобразований в данном случае является документ С.

Рис. 10.3. Двухшаговое преобразование

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

  • Читать дальше
  • 1
  • ...
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: