Каков наилучший способ включения html-объекта в XSLT?
<xsl:template match="/a/node">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
этот возвращает XsltParseError
Каков наилучший способ включения html-объекта в XSLT?
<xsl:template match="/a/node">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
этот возвращает XsltParseError
Вы можете использовать раздел CDATA
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
или вы можете описать & nbsp в локальном DTD:
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
или просто используйте  
вместо
Также можно расширить подход из 2-й части ответа aku и получить все известные ссылки на символы, например:
<!DOCTYPE stylesheet [
<!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
"http://www.w3.org/2003/entities/2007/w3centities-f.ent">
%w3centities-f;
]>
...
<xsl:text> −30°</xsl:text>
В результате есть определенная разница по сравнению с подходом <xsl:text disable-output-escaping="yes">
. Последний будет создавать строковые литералы, такие как
для всех видов вывода, даже для <xsl:output method="text">
, и это может отличаться от того, что вы можете пожелать... Напротив, получение сущностей, определенных для шаблона XSLT через <!DOCTYPE ... <!ENTITY ...
всегда будет выводить результат, соответствующий вашим настройкам xsl:output
.
Тогда может быть разумным использовать локальный распознаватель сущности, чтобы механизм XSLT не выводил определения сущности символов из Интернета. JAXP или явным пользователям Xalan-J может потребоваться исправление для Xalan-J, чтобы правильно использовать преобразователь. Смотрите мой блог XSLT, сущности, Java, Xalan... для загрузки папок и комментариев.
еще одна возможность использовать html-объекты из xslt является следующей:
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
XSLT обрабатывает только пять основных объектов по умолчанию: lt
, gt
, apos
, quot
и amp
. Все остальные должны быть определены как @Aku.
этот возвращает XsltParseError
Да, и причина в том, что
не является предопределенным сущностью в XML или XSLT, как в HTML.
Вы можете просто использовать символ Юникода, который
означает:  
Теперь, когда Unicode, он обычно контрпродуктивен для использования именованных символов. Я бы рекомендовал использовать символ Unicode для неразрывного пространства вместо сущности только по этой причине. В качестве альтернативы вы можете использовать объект  
;, вместо имени объекта. Использование именованных объектов делает ваш XML зависимым от встроенного или внешнего DTD.
Благодарим вас за информацию. Я написал короткое сообщение в блоге, основанное на том, что сработало для меня, поскольку я делал трансформацию XSLT в шаблоне Dynamicweb CMS.
Сообщение в блоге находится здесь: Как добавить объекты в шаблоны XSLT.
/Стен Хогард
Я обнаружил, что все эти решения выдают символ Â в пустое пространство.
Используя <xsl:text> </xsl:text>
, я решил проблему для меня; но <xsl:text>#x20;</xsl:text>
может работать.
Необходимо использовать объект # x160;
Мне не повезло с подходом DOCTYPE от Аку.
Что работало для меня в MSXML-преобразованиях на сервере Windows 2003, было
<xsl:text disable-output-escaping="yes">&#160;</xsl:text>
Тип гибрида выше. Спасибо, вкладчики Stackoverflow!
Один пробел между текстовыми тегами должен быть достаточно.