Kniga-Online.club

Алексей Валиков - Технология XSLT

Читать бесплатно Алексей Валиков - Технология XSLT. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

<xsl:template match="answer">

 The answer was &quot;<xsl:value-of select="text()"/>&quot;.

</xsl:template>

Листинг 7.13. Созданный текст

The answer was "No!".

Текстовые узлы могут также быть созданы элементами xsl:text и xsl:value-of. Элемент xsl:text используется для создания текстовых узлов, содержащих пробельные и специальные символы, в то время как элемент xsl:value-of выводит в выходящее дерево строковый результат вычисления выражений.

Элемент xsl:text

Синтаксис данного элемента представлен ниже:

<xsl:text

 disable-output-escaping="yes" | "no">

 <!-- Содержимое: символьные данные -->

</xsl:text>

Элемент xsl:text служит для того, чтобы создавать в выходящем документе текстовые узлы. При этом xsl:text имеет следующие особенности.

□ Преобразования будут сохранять пробельные символы, находящиеся в элементе xsl:text. То есть, для того чтобы вывести в выходящий документ пробельный символ, например такой, как символ перевода строки, достаточно написать

<xsl:text>&#10;</xsl:text>

□ Элемент xsl:text имеет атрибут disable-output-escaping, который позволяет избежать замены в выходящем документе специальных символов на символьные или встроенные сущности. Например, для того, чтобы вывести символ "<" можно указать в преобразовании

<xsl:text disable-output-escaping="yes">&lt;</xsl:text>

В остальных случаях символьные данные, включенные в элемент xsl:text, ведут себя так же, как и вне xsl:text.

Элемент xsl:value-of

Этот элемент является одним из наиболее часто используемых в XSLT. Он служит для вычисления значений выражений.

Синтаксическая конструкция элемента следующая:

<xsl:value-of

 select="выражение"

 disable-output-escaping="yes" | "no"/>

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

Элемент xsl:value-of очень похож на элемент xsl:copy-of, только в отличие от последнего он сначала преобразовывает вычисленное выражение к строковому виду, а уж затем выводит его в выходящий документ. Иными словами, выражение

<xsl:value-of select="выражение"/>

равносильно

<xsl:copy-of select="string{выражение}"/>

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

Пример

Для составления таблицы умножения можно воспользоваться следующим преобразованием.

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

<numbers>

 <number>1</number>

 <number>2</number>

 <number>3</number>

 <number>4</number>

 <number>5</number>

 <number>6</number>

 <number>7</number>

 <number>8</number>

 <number>9</number>

</numbers>

Листинг 7.15. Преобразование, создающее таблицу умножения

<xsl:stylesheet

 version="1.0"

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

 <xsl:output method="text"/>

 <xsl:template match="numbers">

  <xsl:variable name="numbers" select="number"/>

  <xsl:for-each select="$numbers">

   <xsl:variable name="a" select="."/>

   <xsl:for-each select="$numbers">

    <xsl:variable name="b" select="."/>

    <!-- Если результат произведения меньше 10, добавляем пробел -->

    <xsl:if test="$a * $b &lt; 10">

     <xsl:text> </xsl:text>

    </xsl:if>

    <xsl:value-of select="$a*$b"/>

    <xsl:text> </xsl:text>

   </xsl:for-each>

   <xsl:text>&#xA;</xsl:text>

  </xsl:for-each>

 </xsl:template>

</xsl:stylesheet>

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

1  2  3  4  5  6  7  8  9

2  4  6  8 10 12 14 16 18

3  6  9 12 15 18 21 24 27

4  8 12 16 20 24 28 32 36

5 10 15 20 25 30 35 40 45

6 12 18 24 30 36 42 48 54

7 14 21 28 35 42 49 56 63

8 16 24 32 40 48 56 64 72

9 18 27 36 45 54 63 72 81

В данном случае элемент xsl:value-of используется для вычисления произведения переменных a и b. Численный результат преобразуется в строку и выводится в выходящий документ в виде текста.

Равно, как и xsl:text, элемент xsl:value-of может иметь атрибут disable-output-escaping, полезный для вывода специальных символов, которые в противном случае были бы заменены сущностями.

Пример

Результатом выполнения элемента

<xsl:value-of select="concat('Divide ', '&amp;', ' impera')"/>

будет текстовый узел

Divide &amp; impera

Чтобы придать амперсанту более привычный вид, мы можем использовать атрибут disable-output-escaping:

<xsl:value-of

select="concat('Divide ', '&amp;', ' impera')"

disable-output-escaping="yes"/>

Результатом выполнения этого шаблона уже будет текст:

Divide & impera

Создание узлов комментариев и инструкций по обработке

Элемент xsl:comment

Этот элемент задается конструкцией вида:

<xsl:comment>

<!-- Содержимое: шаблон -->

</xsl:comment>

Элемент xsl:comment создает в результирующем дереве узел комментария. Текстом комментария становится результат выполнения шаблона, который содержится в элементе xsl:comment.

Точно так же как и в случае с xsl:processing-instruction, результат выполнения шаблона должен содержать только текстовые узлы. Узлы других типов будут либо проигнорированы, либо вызовут ошибку.

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

Пример

Элемент:

<xsl:comment>&#xA; | Please remove this later&#xA; +</xsl:comment>

создаст комментарий:

<!--

 | Please remove this later

 +-->

Элемент xsl:processing-instruction

Синтаксис элемента представлен ниже:

<xsl:processing-instruction

 name="{имя}">

 <!-- Содержимое: шаблон -->

</xsl:processing-instruction>

Элемент xsl:processing-instruction создает в результирующем дереве узел инструкции по обработке. Обязательный атрибут name определяет имя целевого приложения, которому будет адресована инструкция по обработке. В этом атрибуте может быть указан шаблон значения атрибута.

Пример

Элемент:

<xsl:processing-instruction name="servlet">

 <xsl:text>links="follow" session-timeout="7200000"</xsl:text>

</xsl:processing-instruction>

создаст в выходящем документе инструкцию по обработке вида:

<?servlet links="follow" session-timeout="7200000"?>

Содержимым создаваемой инструкции по обработке является результат выполнения шаблона, содержащегося внутри элемента xsl:processing- instruction. Этот результат должен содержать только текстовые узлы, в противном случае процессор может либо выдать ошибку, либо проигнорировать нетекстовые узлы вместе с их содержимым.

Инструкция по обработке не может содержать последовательности символов "?>", поскольку это было бы некорректно с точки зрения синтаксиса XML.

В случае, если результат выполнения шаблона содержит такую комбинацию, процессор может либо выдать ошибку, либо разделить символы "?" и ">" пробелом:"? >".

Имя инструкции по обработке, должно быть корректным XML-именем (но не равным при этом "xml" в любом регистре символов). Например, следующее определение будет совершенно корректным:

<xsl:processing-instruction name="_">

 <xsl:text>logout _</xsl:text>

</xsl:processing-instruction>

В результате получится следующая инструкция: <?_ logout _?>

Для того чтобы создать в выходящем XML-документе инструкцию xml-stylesheet, которая используется для связывания документов со стилями и преобразованиями, можно воспользоваться следующим определением:

Перейти на страницу:

Алексей Валиков читать все книги автора по порядку

Алексей Валиков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Технология XSLT отзывы

Отзывы читателей о книге Технология XSLT, автор: Алексей Валиков. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*