Элементы xsl:preserve-space и xsl:strip-space

Элементы xsl:preserve-space и xsl:strip-space

Синтаксические конструкции этих элементов очень похожи:

<xsl:preserve-space

 elements="токены"/>

<xsl:strip-space

 elements="токены"/>

Элемент xsl:preserve-space добавляет, a xsl:strip-space удаляет имя элемента из сохраняющего множества входящего документа.

Пример

Предположим, нам нужно сохранять пробельные символы во всех элементах d и удалять их в элементах с. Тогда в преобразовании достаточно указать

<xsl:preserve-space elements="d"/>

<xsl:strip-space elements="c"/>

Вообще, обязательные атрибуты elements элементов xsl:strip-space и xsl:preserve-space содержат не сами имена элементов, а так называемые проверки имен. Проверка имени имеет три варианта синтаксиса.

? Синтаксис "*" используется для выбора произвольных имен. Ей будут соответствовать любые имена элементов.

? Синтаксис "имя" используется для выбора элементов с заданным именем. К примеру, проверке имени "d" будут соответствовать все элементы с именем "d".

? Синтаксис "префикс:*" используется для выбора всех элементов в данном пространстве имен. К примеру, если в документе определен префикс пространства имен upr в виде атрибута xmlns:upr="http://www.upr.com", проверке имени "upr:*" будут соответствовать все элементы пространства имен, определяемого идентификатором "http://www.upr.com".

Пример

Предположим, что нам необходимо сохранить пробельные символы в элементе с именем с и удалить их в элементе e и элементах, принадлежащих пространству имен, определяемому идентификатором "urn:d".

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

<а xmlns:d="urn:d">¶

??<d:b>¶

????<c>¶

??????</e>¶

????</c>¶

??</d:b>¶

</a>

Листинг 8.3. Преобразование

<xsl:stylesheet

 version="1.0"

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

 <xsl:preserve-space elements="c"/>

 <xsl:strip-space elements="e t:*"

  xmlns:t="urn:d"/>

 <xsl:template match="/">

  <xsl:copy-of select="/"/>

 </xsl:template>

</xsl:stylesheet>

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

<?xml version="1.0" encoding="utf-8"?><a xmlns:d="urn:d">¶

??<d:b><c>¶

??????<e/>¶

????</c></d:b>¶

</a>