Задний план
Сохраняйте удобочитаемый исходный код XSL при создании HTML без чрезмерных разрывов, которые вводят пробелы между предложениями и завершающими знаками препинания. Из Переосмысление XSLT:
Пробелы в таблицах стилей XSLT особенно проблематичны, поскольку они служат двум целям: (1) для форматирования самой таблицы стилей XSLT; и (2) для указания того, где должны располагаться пробелы в выходных данных XML, обработанных с помощью XSLT.
Проблема
Шаблон XSL содержит следующий код:
<xsl:if test="@min-time < @max-time">
for
<xsl:value-of select="@min-time" />
to
<xsl:value-of select="@max-time" />
minutes
</xsl:if>
<xsl:if test="@setting">
on <xsl:value-of select="@setting" /> heat
</xsl:if>
.
Это, например, генерирует следующий вывод (с пробелами точно так, как показано):
for
2
to
3
minutes
.
Все основные браузеры производят:
for 2 to 3 minutes .
Почти безупречно, за исключением пробела между словом minutes
и пунктуацией. Желаемый результат:
for 2 to 3 minutes.
Можно убрать пробел, удалив отступы и символы новой строки в шаблоне XSL, но это означает наличие уродливого исходного кода XSL.
Обходной путь
Первоначально желаемый вывод был заключен в переменную, а затем записан следующим образом:
<xsl:value-of select="normalize-space($step)" />.
Это работало, пока я не попытался обернуть <span>
элементов в переменную. Элементы <span>
никогда не появлялись в сгенерированном HTML-коде. Также неверен следующий код:
<xsl:copy-of select="normalize-space($step)" />.
Технические детали
Таблица стилей уже использует:
<xsl:strip-space elements="*" />
<xsl:output indent="no" ... />
Связанный
Вопрос
Как сказать процессору XSLT убрать это пространство?
Спасибо!
vi
. ;-) А я решил проблему уже с лишней переменной. Однако за идею спасибо! - person Dave Jarvis   schedule 15.05.2012