Язык преобразований XSL

Удаление пробельных символов


После построения дерева исходного документа или документа стиля, но перед какой-либо его обработкой XSLT процессором, выполняется очистка (stripping) некоторых текстовых узлов. Текстовый узел вычищается только тогда, когда он содержит одни пробельные символы. При очистке текстовый узел удаляется из дерева документа. На вход процедура очистки получает перечень названий элементов, для которых следует сохранить пробельные символы. Процедура очистки применяется как для стилей, так и для исходных документов, однако перечень названий элементов, сохраняющих пробельные символы, для стилей и исходных документов определяется отдельно.

Текстовый узел сохраняется если имеет место какое-либо из следующих условий:

Название элемента, являющегося родителем данного текстового узла, находится в перечне названий элементов, сохраняющих пробельные символы.

Текстовый узел содержит хотя бы один непробельный символ. Как и в XML, пробельным символом считаются #x20, #x9, #xD и #xA.

Элемент, являющийся предком этого текстового узла, имеет атрибут xml:space со значением preserve и нет более близких элементов-предков, имеющих xml:space со значением default.

В остальных случаях текстовый узел вычищается.

Атрибуты xml:space из дерева не вычищаются.

Замечание: Это подразумевает, что если для фиксированного конечного элемента был указан атрибут xml:space, то он будет включен в результат.

В случае со стилями перечень названий элементов, сохраняющих пробельные символы, состоит лишь из xsl:text.

<!-- Category: top-level-element -->
<xsl:strip-space
elements = tokens />

<!-- Category: top-level-element -->
<xsl:preserve-space
  elements = tokens />

Для исходных документов перечень названий элементов, сохраняющих пробельные символы, задается элементами xsl:strip-space и xsl:preserve-space. Каждый из этих элементов имеет атрибут elements, значением которого является перечень -ов (через пробельный символ). Изначально набор названий элементов, сохраняющих пробельные символы, содержит названия всех элементов.
Если название элемента совпадает с в элементе xsl:strip-space, то он удаляется из перечня названий элементов, сохраняющих пробельные символы. Если название элемента совпадает с в элементе xsl:preserve-space, то оно добавляется к перечню названий элементов, сохраняющих пробельные символы. Элемент соответствует тогда и только тогда, когда для и этого узла дает результат true. Конфликты между соответствием элементам xsl:strip-space и xsl:preserve-space разрешаются так же как конфликты между правилами шаблона (см. ). Таким образом, образец, соответствующий заданному названию элемента, определяется следующим образом:

Во-первых, любой образец, имеющий по отношению к другому образцу меньший , игнорируется.

Далее, любой образец с , который имеет более низкий , чем у для другого образца, игнорируется.

Если и после этого остается более одного образца, соответствующего названию элемента, фиксируется ошибка. XSLT процессор может фиксировать ошибку. Если он этого не делает, то должен обработать ее сам, выбрав среди оставшихся соответствующих названию элемента образцов тот, который в этом стиле был найден последним.


Содержание раздела