Использование HTML-объекта в XSLT (например )
каков наилучший способ включить HTML-объект в XSLT?
<xsl:template match="/a/node">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
этот возвращает a XsltParseError
11 ответов:
вы можете использовать раздел CDATA
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
или вы можете описать   в локальном DTD:
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
или просто использовать
 
вместо
также можно расширить подход из 2-й части Аку и получить все известные ссылки на символы доступны, как это:
<!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 упоминает.
этот возвращает a XsltParseError
да, и причина этого в том, что
не является предопределенной сущностью в XML или XSLT, как в HTML.вы можете просто использовать символ Юникода, который
означает: 
теперь, когда есть Unicode, обычно контрпродуктивно использовать именованные символьные сущности. Я бы рекомендовал использовать символ Юникода для неразрывного пространства вместо сущности, именно по этой причине. Кроме того, вы можете использовать сущность
 
;, вместо именованного объекта. Использование именованных сущностей делает ваш XML зависимым от встроенного или внешнего DTD.
я обнаружил, что все эти решения произвели символ Â в пустом пространстве.
используя
<xsl:text> </xsl:text>
решил проблему для меня; но<xsl:text>#x20;</xsl:text>
может также работать.
Спасибо за информацию. Я написал короткое сообщение в блоге, основанное на том, что сработало для меня, когда я делал преобразование XSLT в шаблоне Dynamicweb CMS.
сообщение в блоге здесь: как добавить объекты в шаблоны XSLT.
/ Sten Hougaard