Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Отступы, пробелы и переносы строк в XLST


Автор: Greendrake 10.2.2006, 23:50
Существуют ли правила/законы по которым отступы, пробелы и переносы строк в XSL-шаблоне переносятся в результат трансформации?

Ещё вот http://www.artlebedev.ru/studio/vacancy/web_tech_3/ нашёл такой вопрос:

Что здесь не так и как это исправить?

<xsl:template match="para">
<a href="{@href}">
clickme
</a>
</xsl:template>


Думаю здесь сабж и имеется ввиду. Какой ответ?

P.S. Исходник вопроса лучше посмотреть по ссылке, т. к. тут отступы не отображаются smile

Автор: Beard 11.2.2006, 02:49
Цитата:
Текстовый узел сохраняется если имеет место какое-либо из следующих условий:

*

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

Текстовый узел содержит хотя бы один непробельный символ. Как и в 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, значением которого является перечень NameTest-ов (через пробельный символ). Изначально набор названий элементов, сохраняющих пробельные символы, содержит названия всех элементов. Если название элемента совпадает с NameTest в элементе xsl:strip-space, то он удаляется из перечня названий элементов, сохраняющих пробельные символы. Если название элемента совпадает с NameTest в элементе xsl:preserve-space, то оно добавляется к перечню названий элементов, сохраняющих пробельные символы.

Автор: Greendrake 11.2.2006, 17:13
Цитата(Beard @ 11.2.2006, 02:49)
Текстовый узел сохраняется если имеет место какое-либо из следующих условий

Это всё хорошо, но что, собственно, есть текстовый узел?

Не уж то несколько пробелов, расположенных между <a href="{@href}> и clickme считаются узлом?? А может ещё, каждый из этих пробелов - узел smile

ИМХО, узлом-то должен считаться тег. Тем не менее, вышеописанные пробелы вроде бы вычищаются.

Автор: OstinStar 21.3.2006, 21:48
У меня такая проблема:
при отображении xml в IE6 все, что находится в cdata пишется в одну строчку - без табуляций и переносов на след. строку. Это происходит после прикрепления xsl к xml. А мне нужно, чтобы cdata отображалась также как без xsl.

Автор: Ignat 23.3.2006, 19:45
OstinStar, думаю, <pre></pre> спасет.

Автор: OstinStar 24.3.2006, 07:33
Спасибо, уже спасло smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)