Книга: XSLT
Обработка символов-разделителей
Обработка символов-разделителей
Поначалу символы-разделители (whitespace) доставляют авторам XSLT много хлопот. В главе 2 объяснялось, что «чистые» узлы-разделители — это текстовые узлы, содержащие только символы-разделители (пробелы, возвраты каретки, переводы строки и символы табуляции). Эти узлы по умолчанию копируются из исходного документа.
Заметьте, что в таблице стилей также могут быть узлы-разделители:
<xsl:template match="PLANETS">
<xsl:copy>
<xsl:apply-templates select="PLANET"/>
</xsl:copy>
</xsl:template>
В нашем случае пробелы используются для выравнивания элементов таблицы стилей, а возвраты каретки — для разрежения кода. Чистые узлы-разделители, такие, как этот, не копируются из таблицы стилей в выходной документ. Заметьте, однако, что разделитель из следующего элемента <TITLE>
копируется в выходной документ, так как это не чистый узел-разделитель (он также содержит текст «The Planets Table»):
<xsl:template match="/PLANETS">
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
.
.
.
Если вы хотите убрать этот разделитель и сохранить выравнивание, можно использовать пустые элементы <xsl:text>
, так чтобы символы-разделители стали чистыми узлами-разделителями:
<xsl:template match="/PLANETS">
<HTML>
<HEAD>
<TITLE>
<xsl:text/>The Planets Table<xsl:text/>
</TITLE>
.
.
.
Чистые узлы-разделители не копируются из таблицы стилей в выходной документ, если только они не находятся внутри элемента <xsl:text>
, или у элемента, в который они вложены, атрибут xml:space
не установлен в «preserve» (сохранить).
С другой стороны, по умолчанию XSLT сохраняет текстовые узлы разделители в исходном документе и копирует их в результирующий документ. Возьмите уже рассмотренную нами копирующую таблицу стилей, которая копирует все элементы из исходного документа в результирующий:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
и примените ее к planets.xml
; все символы-разделители будут также скопированы в результирующий документ:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xml" href="planets.xsl"?>
<PLANETS>
<PLANET>
<NAME>Mercury</NAME>
<MASS UNITS="(Earth = 1)">.0553</MASS>
<DAY UNITS="days">58.65</DAY>
<RADIUS UNITS="miles">1516</RADIUS>
<DENSITY UNITS="(Earth = 1)>.983</DENSITY>
<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->
</PLANET>
.
.
.
Тем не менее, иногда требуется удалить разделители, используемые при форматировании входных документов — это можно сделать при помощи элемента <xsl:strip-space>
.
- Создание шаблона
- Обработка дочерних узлов
- Доступ к значениям узлов
- Создание образцов выбора
- Выбор применяемого шаблона
- Чтение значений атрибутов
- Элемент
- Отключение вывода эскейп-последовательностей
- Написание значений атрибутов
- Шаблоны значений атрибутов
- Обработка символов-разделителей
- Элементы и
- Автоматическое выравнивание
- Правила по умолчанию в шаблоне
- Удаление содержимого
- Разрешение конфликтов шаблонов
- Элемент
- Элемент
- Элемент
- Обработка перехваченных ошибок
- 5.4 Команда trap: обработка прерываний
- Имена объектов длиной 68 символов
- 15.3. Обработка изображений при помощи RMagick
- 15.1.3. Обработка сигналов управления заданиями
- ГЛАВА 4 Обработка исключений
- Обработка запросов с помощью PHP
- ГЛАВА 6. Структурированная обработка исключений
- Обработка ошибок
- Скрипт «Обработка входящего звонка от потенциального клиента»
- На сайтах вместо текста отображается непонятный набор символов
- В Adobe Acrobat Reader русский текст на экране читается нормально, а при печати получается текст из набора символов. Как...