задать элементы, в которых следует сохранить узлы-разделители, можно при помощи элемента <xsl:preserve-space>. У этого элемента такой же атрибут, что и у <xsl:strip- space>:

• elements (обязательный). Задает элементы, в которых нужно сохранить символы- разделители. Представляет собой список разделенных символами-разделителями NameTest (именами или обобщенными именами с символами подстановок).

Фактически элемент <xsl:preserve-space> является элементом по умолчанию для всех элементов в XSLT. Если вы использовали элемент <xsl:strip-space>, все равно можно указать, в каком элементе или элементах нужно сохранить узлы-разделители, установив атрибут elements элемента <xsl:preserve-space> в список этих элементов:

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

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

 <xsl:strip-space elements='*'/>

 <xsl:preserve-space elements='MASS RADIUS'/>

 <xsl:output method='xml'/>

 <xsl:template match='*'>

  <xsl:copy>

   <xsl:apply-templates/>

  </xsl:copy>

 </xsl:template>

</xsl:stylesheet>

Обсужденные средства удаления и сохранения разделителей могут показаться слишком сложными для форматирования выходных документов выравнивающими пробелами, но, к счастью, существует простой способ: атрибут indent элемента <xsl:output> позволяет автоматически выровнять выходной документ.

Автоматическое выравнивание

Элемент <xsl:output> поддерживает атрибут indent который устанавливается в «yes» или «no», и указывает процессору XSLT, нужно ли выравнивать результирующий документ. Как правило, выравнивание результирующего документа не имеет большого значения, поскольку с ним работает приложение, которому все равно, выровнен документ или нет, как мы видели в примерах преобразований XML- XML и XML-HTML. Однако иногда требуется представить результирующий документ в виде простого текста, и в таких случаях выравнивание документа для отображения иерархической структуры может оказаться удобным.

Способ работы процессора XSLT с переменной выравнивания не регламентируется W3C и зависит от процессора, поэтому для получения требуемого результата нужно экспериментировать. Пусть, например, у нас есть версия 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>

<PLANET>

<NAME>Venus</NAME>

<MASS UNITS='(Earth = 1)'>.815</MASS>

<DAY UNITS='days'>116.75</DAY>

<RADIUS UNITS='miles'>3716</RADIUS>

<DENSITY UNITS='(Earth = 1)'>.943</DENSITY>

<DISTANCE UNITS='million miles'>66.8</DISTANCE><!--В перигелии-- >

</PLANET>

<PLANET>

<NAME>Earth</NAME>

<MASS UNITS='(Earth = 1)'>1</MASS>

<DAY UNITS='days'>1</DAY>

<RADIUS UNITS='miles'>2107</RADIUS>

<DENSITY UNITS='(Earth = 1)'>1</DENSITY>

<DISTANCE UNITS='million miles'>128.4</DISTANCE><!--B перигелии-- >

</PLANET>

</PLANETS>

При помощи элемента <xsl:output indent='yes'/> можно указать процессору XSLT осуществлять выравнивание документа при преобразовании его в HTML (листинг 3.6).

Листинг 3.6. Таблица стилей, задающая выравнивание

<?xml version='1.0'?>

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:output indent='yes'/>

<xsl:template match='/PLANETS'>

<HTML>

<HEAD>

<TITLE<

The Planets Table

</TITLE></HEAD> <BODY> <H1>

The Planets Table

</H1>

<TABLE BORDER='2'>

<TD>Name</TD>

<TD>Mass</TD>

<TD>Radius</TD>

<TD>Day>/TD>

<xsl:apply-templates/>

</TABLE>

</BODY>

</HTML>

</xsl:template>

<xsl:template match='PLANET'>

<TR>

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату