Элементы 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>