Как вставить в XSLT - PullRequest
       100

Как вставить в XSLT

198 голосов
/ 22 сентября 2009

Как мне вставить

 

В таблицу стилей XSLT я получаю эту ошибку:

Ошибка синтаксического анализа XML: неопределенная сущность

По сути, я хочу, чтобы в шаблоне XSLT использовался символ без пробелов.

Ответы [ 11 ]

323 голосов
/ 22 сентября 2009

Вместо этого используйте код объекта  .

  - это HTML «ссылка на символьную сущность». В XML нет именованного объекта для неразрывного пробела, поэтому вы используете код  .

Википедия включает список сущностей XML и HTML , и вы можете видеть, что в XML есть только 5 «предопределенных сущностей», но в HTML их более 200. Я также укажу на Создание пробела (& nbsp;) в XSL , в котором есть отличные ответы.

32 голосов
/ 04 ноября 2013

&#160; работает действительно хорошо. Тем не менее, он будет отображать один из этих странных символов в кодировке ANSI. <xsl:text> работал лучше всего для меня.

<xsl:text> </xsl:text>
24 голосов
/ 23 августа 2011

Можно также сделать это:

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
20 голосов
/ 22 сентября 2009

Используйте это

<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;

edit: Downvoters, вероятно, должны проверить, что это работает в первую очередь (это работает и является наиболее общим решением проблемы).

13 голосов
/ 22 сентября 2009

Возможно, вы захотите добавить определение для этой сущности в начале файла (ниже декларации xml):

<!DOCTYPE stylesheet [
<!ENTITY nbsp  "&#160;" >
]>

Также вы можете добавить больше объектов, таких как Ntilde, Aacute и т. Д.

5 голосов
/ 07 апреля 2013

В дополнение к ответу Виктора Гюго можно получить все известные ссылки на символы в XSLT-файле, например:

<!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>&amp; &nbsp; &ndash;</xsl:text>

Существует также определенная разница в результате этого подхода по сравнению с <xsl:text disable-output-escaping="yes"> единицей. Последний будет производить строковые литералы, такие как &nbsp; для всех видов вывода, даже для <xsl:output method="text">, и это может отличаться от того, что вы могли бы пожелать ... Напротив, получение сущностей, определенных для шаблона XSLT через <!DOCTYPE ... <!ENTITY ... всегда будет выводить в соответствии с вашими xsl:output настройками.

И при включении всех ссылок на символы может оказаться целесообразным использовать локальный преобразователь сущностей, чтобы механизм XSLT не мог получать определения сущностей символов из Интернета. JAXP или явным пользователям Xalan-J может понадобиться патч для Xalan-J, чтобы правильно использовать распознаватель. Смотрите мой блог XSLT, лица, Java, Xalan ... для загрузки патча и комментариев.

2 голосов
/ 01 сентября 2016

XSLT таблицы стилей должны быть правильно сформированы в формате XML. Поскольку "&nbsp;" не является одной из пяти предопределенных сущностей XML , его нельзя напрямую включить в таблицу стилей. Поэтому возвращение к вашему решению "&#160;" является идеальной заменой "&nbsp;", который вы должны использовать.

Пример:

<xsl:value-of select="$txtFName"/>&#160;<xsl:value-of select="$txtLName"/>
2 голосов
/ 09 июля 2013

При использовании следующего (без disable-output-escaping!) Вы получите один неразрывный пробел:

<xsl:text>&#160;</xsl:text>

0 голосов
/ 26 апреля 2018

Попробуйте использовать

<xsl:text>&#160;</xsl:text>

Но это зависит от используемого вами процессора XSLT: спецификация XSLT не требует, чтобы процессоры XSLT преобразовывали его в "&nbsp;"

0 голосов
/ 01 декабря 2014

Вы также можете использовать:

<xsl:value-of select="'&amp;nbsp'"/>

запомните усилитель после & или вы получите сообщение об ошибке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...