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

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

Шрифт:
Пример

Представим себе два простых преобразования,

first.xsl
и
second.xsl
, первое из которых заменяет во входящем документе элементы
а
на элементы
b
, а второе — элементы
b
на элементы
с
.

Листинг 10.13. Преобразование first.xsl

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="a">

<b>

<xsl:apply-templates select="@*|node"/>

</b>

 </xsl:template>

 <xsl:template match="@*|node">

<xsl:copy>

<xsl:apply-templates select="@*|node"/>

</xsl:copy>

 </xsl:template>

</xsl:stylesheet>

Листинг 10.14. Преобразование second.xsl

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="b">

<c>

<xsl:apply-templates select="@*|node"/>

</c>

 </xsl:template>

 <xsl:template match="@*|node">

<xsl:copy>

<xsl:apply-templates select="@*|node"/>

</xsl:copy>

</xsl:template>

</xsl:stylesheet>

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

a.xml
, мы можем, например, дважды вызвать процессор:

java org.apache.xalan.xslt.Process -IN a.xml -XSL first.xsl -OUT b.xml

java org.apache.xalan.xslt.Process -IN b.xml -XSL second.xsl -OUT c.xml

В результате этих вызовов XSLT-процессор Xalan сначала применит преобразование

first.xsl
к документу
a.xml
и сохранит результат в файле
b.xml
, а затем обработает полученный документ
b.xml
при помощи преобразования
second.xml
и сохранит результат в файле
c.xml
.

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

first.xsl
и
second.xsl
к входящему документу. Для этого:

□ назначим шаблонам преобразования

first.xsl
режим
first
, а шаблонам преобразования
second.xsl
— режим
second
;

□ в основном шаблоне применим шаблоны режима

first
к узлам входящего документа, сохранив результат в переменной
b
;

□ приведем результирующее дерево, содержащееся в переменной

b
ко множеству узлов;

□ обработаем полученное множество узлов шаблонами режима

second
.

Следующий листинг демонстрирует предложенный подход.

Листинг 10.5. Преобразование first-then-second.xsl

<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">

 <!-- Шаблоны преобразования first -->

 <xsl:template match="a" mode="first">

<b>

<xsl:apply-templates select="@*|node" mode="first"/>

</b>

 </xsl:template>

 <xsl:template match="@*|node" mode="first">

<xsl:copy>

<xsl:apply-templates select="@*|node" mode="first"/>

</xsl:copy>

 </xsl:template>

 <!-- Шаблоны преобразования second -->

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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