<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>
.
Элементы <xsl:strip-space> и <xsl:preserve-space>
Элемент <xsl:strip-space>
дает указание процессору XSLT убрать все чистые узлы-разделители (также называемые «потребляемыми», expendable, узлами-разделителями) из. выходного документа. Чистый узел-разделитель состоит только из символов-разделителей и не содержит текст какого- либо другого вида. У этого элемента только один атрибут:
• elements
(обязательный). Задает элементы, из которых нужно убрать символы- разделители. Представляет, собой список разделённых символами- разделителями NameTest
(именами или обобщёнными именами с символами подстановок).
Элемент не включает содержимого. Например, чтобы удалить все узлы-разделители из planets.xml
, можно применить <xsl:strip-space elements='*'/>
следующим образом:
<?xml version='1.0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:strip-space elements='*'/>
<xsl:output method='xml'/>
<xsl:template match='*'>
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Вот результирующий документ, полученный после применения этой таблицы стилей к planets.xml
. Обратите внимание на то, что убраны все символы-разделители, в том числе все символы новой строки:
<?xml version='1.0' encoding='utf-8'? ><PLANETS><PLANET><NAME>Mercury</NAME><MASS>.0553</MASS><DA Y>58.65</DAY><RADIUS>1516</RADIUS><DENSITY>.983</DENSITY><DISTANCE >43.4</DISTANCE></PLANET><PLANET><NAME>Venus</NAME><MASS>.815& lt;/MASS><DAY>116.75</DAY><RADIUS>3716</RADIUS><DENSITY>.943</DENSI TY><DISTANCE>66.8</DISTANCE></PLANET><PLANET><NAME>Earth</NAME> <MASS>1</MASS><DAY>1</DAY><RADIUS>2107</RADIUS><DENSITY>1< ;/DENSITY><DISTANCE>128.4</DISTANCE></PLANET></PLANETS>
Заметьте, что таким образом удаляются только чистые узлы-разделители. Например, текст элемента <TITLE>Volcanoes for Dinner</TITLE>
не содержит чистых текстовых узлов- разделителей, поэтому текст «Volcanoes for Dinner» будет сохранен в выходном документе вместе с пробелами. Так будет даже тогда, когда текст будет содержать несколько пробелов подряд, как в «Volcanoes for Dinner».
В некоторых ситуациях может потребоваться не удалять все узлы-разделители из всего документа;