Недавно мы столкнулись с ситуацией, когда только один из многих XSL перестал работать с этой техникой и начал показывать странный символ. Однако, если я использую технику CDATA от WaterSoul, это сработает.
@BrianReindel, это, вероятно, означает, что вы использовали неправильную цифровую ссылку на сущность, т.е. Šвместо  последней, которая всегда будет преобразовываться в неразрывный пробел Unicode.
 работает действительно хорошо. Тем не менее, он будет отображать один из этих странных символов в кодировке ANSI. <xsl:text>работал лучше для меня.
Используя принятый ответ, я получил пробел в своем выводе XML (по крайней мере, так это выглядело в XML-редакторе VS2010). Используя этот ответ, я получаю ровно 1 пробел.
Mathijs Flietstra
1
@Matthijs, это пробел, а не неразрывный пробел, что не одно и то же. Если VS показывает это неправильно, проверьте свою кодировку (VS вполне способен показать это правильно, и он должен быть независимым от кодировки, так что, скорее всего, вы делали что-то другое неправильно).
Это будет работать, если процессор поддерживаетdisable-output-escaping , что ему не требуется, и было объявлено устаревшим в XSLT 2.0 и особенно в 3.0. В этих версиях вы можете xsl:character-mapдобиться того же эффекта с гарантированно работающим кросс-процессором. Кроме того, это помещает именованную сущность в вывод, который не обязательно совпадает с неразрывным пробелом, и принимающая сторона должна объявить эту сущность (в HTML это обычно неявно).
Не уверен, но я проверил свой подход, и он работает, поэтому я не уверен, для чего был понижен :(
jagprinderdeep
2
Кроме того, принятый ответ не будет действителен для всех парсеров в соответствии со связанной страницей; просто один на один
jagprinderdeep
1
Я уже объяснил причину моего отрицательного ответа, но если бы я понизил этот ответ, то причина была бы - он отвечает на неправильный вопрос. ОП четко спросил, как поставить неразрывное пространство, используя xslt, а вы ответили, как поставить последовательность амперсанд-nbsp-точка с запятой. И ссориться из-за отрицательных голосов тоже неприятно. А если серьезно, ты никогда не говорил такого о CDATA?
Майкл Крелин - хакер
1
Хорошо, jagprinderdeep, я отозвал свое отрицательное голосование, но взамен, пожалуйста, навестите меня, как только я попал в психиатрическую больницу. (обратите внимание, что я не верну вам отрицательный ответ по этой новой причине). Но понимаю, что вы отвечаете не на тот вопрос. Я думаю, что это было причиной других отрицательных голосов.
Майкл Крелин - хакер
8
Я также понизил голосование, поскольку вы не можете гарантировать, что принимающая сторона объявит & nbsp ;. Если вы работаете с xslt + html, то да, это способ сделать это, хотя и взломать. Но если вы используете xslt для генерации другого xml, то он просто взорвется.
Дуг
14
Возможно, вы захотите добавить определение для этой сущности в начале файла (ниже декларации xml):
Существует также определенная разница в результате этого подхода по сравнению с <xsl:text disable-output-escaping="yes">одним. Последний будет производить строковые литералы, как для всех видов вывода, даже для <xsl:output method="text">, и это может отличаться от того, что вы могли бы пожелать ... Напротив, получение сущностей, определенных для шаблона XSLT через <!DOCTYPE ... <!ENTITY ..., всегда будет производить вывод в соответствии с вашxsl:output настройки.
А при включении всех ссылок на символы может оказаться целесообразным использовать локальный преобразователь сущностей, чтобы механизм XSLT не мог получать определения сущностей символов из Интернета. JAXP или явным пользователям Xalan-J может понадобиться патч для Xalan-J, чтобы правильно использовать распознаватель. Смотрите мой блог XSLT, лица, Java, Xalan ... для загрузки патча и комментариев.
Обратите внимание, что в последнее время W3 начал блокировать слишком много запросов к этим и аналогичным ссылкам, если они исходят от автоматизированного процесса. Поместите этот файл локально или на свой сервер и измените URL соответствующим образом, и все будет в порядке. Кроме этого +1 и отличное решение для использования именованных сущностей HTML.
Авель
Хорошая заметка, и есть еще одна причина иметь локальную копию файла с определениями сущностей, так как в противном случае процесс XSLT может завершиться сбоем, если интернет-соединение недоступно. В мире Java нет необходимости взламывать URL-адреса, так как можно организовать EntityResolver , и Apache XML Commons Resolver может быть хорошим кандидатом. Другие программные платформы, вероятно, тоже будут иметь подобные методы ...
Таблицы стилей XSLT должны быть правильно сформированными в формате XML. Поскольку " "это не одна из пяти предопределенных сущностей XML , она не может быть напрямую включена в таблицу стилей. Поэтому возвращение к вашему решению " "является идеальной заменой" " вы должны использовать.
Это выдаст &nbsp;(предполагая, что вы намерены использовать точку с запятой), который будет отображаться как , а не как `` (nb-space).
Авель
0
Я пытался отобразить границы для пустой ячейки в таблице HTML. Мой старый трюк с использованием неразрывного пробела в пустых ячейках не работал с xslt. Я использовал разрыв строки с тем же эффектом. Я упоминаю об этом на всякий случай, потому что вы пытались использовать неразрывный пробел, чтобы дать некоторый контент «пустой» ячейке таблицы, чтобы включить границы ячейки.
Ответы:
Используйте код объекта
 
Вместо этого .
это HTML "ссылка на символьную сущность". Именованная сущность для неразрывного пробела в XML отсутствует, поэтому вы используете код 
.В Википедии есть список сущностей XML и HTML , и вы можете видеть, что в XML есть только 5 «предопределенных сущностей», но в HTML их более 200. Я также укажу на Создание пробела (& nbsp;) в XSL, который имеет отличные ответы.
источник
Š
вместо 
последней, которая всегда будет преобразовываться в неразрывный пробел Unicode. 
работает действительно хорошо. Тем не менее, он будет отображать один из этих странных символов в кодировке ANSI.<xsl:text>
работал лучше для меня.источник
Можно также сделать это:
источник
disable-output-escaping
, что ему не требуется, и было объявлено устаревшим в XSLT 2.0 и особенно в 3.0. В этих версиях вы можетеxsl:character-map
добиться того же эффекта с гарантированно работающим кросс-процессором. Кроме того, это помещает именованную сущность
в вывод, который не обязательно совпадает с неразрывным пробелом, и принимающая сторона должна объявить эту сущность (в HTML это обычно неявно).Использовать это
edit: Downvoters, вероятно, должны проверить, что это работает в первую очередь (это работает, и является наиболее общим решением проблемы).
источник
Возможно, вы захотите добавить определение для этой сущности в начале файла (ниже декларации xml):
Также вы можете добавить больше объектов, таких как Ntilde, Aacute и т. Д.
источник
В дополнение к ответу Виктора Гюго можно получить все допустимые ссылки на символы в файле XSLT, например:
Существует также определенная разница в результате этого подхода по сравнению с
<xsl:text disable-output-escaping="yes">
одним. Последний будет производить строковые литералы, как
для всех видов вывода, даже для<xsl:output method="text">
, и это может отличаться от того, что вы могли бы пожелать ... Напротив, получение сущностей, определенных для шаблона XSLT через<!DOCTYPE ... <!ENTITY ...
, всегда будет производить вывод в соответствии с вашxsl:output
настройки.А при включении всех ссылок на символы может оказаться целесообразным использовать локальный преобразователь сущностей, чтобы механизм XSLT не мог получать определения сущностей символов из Интернета. JAXP или явным пользователям Xalan-J может понадобиться патч для Xalan-J, чтобы правильно использовать распознаватель. Смотрите мой блог XSLT, лица, Java, Xalan ... для загрузки патча и комментариев.
источник
При использовании следующего (без
disable-output-escaping
!) Вы получите один неразрывный пробел:<xsl:text> </xsl:text>
источник
disable-output-escaping
для этогоТаблицы стилей XSLT должны быть правильно сформированными в формате XML. Поскольку
" "
это не одна из пяти предопределенных сущностей XML , она не может быть напрямую включена в таблицу стилей. Поэтому возвращение к вашему решению" "
является идеальной заменой" "
вы должны использовать.Пример:
источник
Вы также можете использовать:
запомните усилитель после & или вы получите сообщение об ошибке
источник
&nbsp;
(предполагая, что вы намерены использовать точку с запятой), который будет отображаться как
, а не как `` (nb-space).Я пытался отобразить границы для пустой ячейки в таблице HTML. Мой старый трюк с использованием неразрывного пробела в пустых ячейках не работал с xslt. Я использовал разрыв строки с тем же эффектом. Я упоминаю об этом на всякий случай, потому что вы пытались использовать неразрывный пробел, чтобы дать некоторый контент «пустой» ячейке таблицы, чтобы включить границы ячейки.
источник
Попробуй использовать
Но это зависит от используемого вами процессора XSLT: спецификация XSLT не требует, чтобы процессоры XSLT преобразовывали его в "
".источник
Хотя ответ уже был предоставлен @brabster и другими.
Я думаю, что более многократное решение будет:
источник