Как я могу вставить
В таблицу стилей XSLT я продолжаю получать эту ошибку:
Ошибка синтаксического анализа XML: неопределенная сущность
По сути, я хочу, чтобы в шаблоне XSLT был символ пробела.
Как я могу вставить
В таблицу стилей XSLT я продолжаю получать эту ошибку:
Ошибка синтаксического анализа XML: неопределенная сущность
По сути, я хочу, чтобы в шаблоне XSLT был символ пробела.
Ответы:
Используйте код объекта  
Вместо этого .
это HTML "ссылка на символьную сущность". Именованная сущность для неразрывного пробела в XML отсутствует, поэтому вы используете код  
.
В Википедии есть список сущностей XML и HTML , и вы можете видеть, что в XML есть только 5 «предопределенных сущностей», но в HTML их более 200. Я также укажу на Создание пробела (& nbsp;) в XSL, который имеет отличные ответы.
Š
вместо  
последней, которая всегда будет преобразовываться в неразрывный пробел Unicode.
 
работает действительно хорошо. Тем не менее, он будет отображать один из этих странных символов в кодировке ANSI. <xsl:text>
работал лучше для меня.
<xsl:text> </xsl:text>
Можно также сделать это:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping
, что ему не требуется, и было объявлено устаревшим в XSLT 2.0 и особенно в 3.0. В этих версиях вы можете xsl:character-map
добиться того же эффекта с гарантированно работающим кросс-процессором. Кроме того, это помещает именованную сущность
в вывод, который не обязательно совпадает с неразрывным пробелом, и принимающая сторона должна объявить эту сущность (в HTML это обычно неявно).
Использовать это
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
edit: Downvoters, вероятно, должны проверить, что это работает в первую очередь (это работает, и является наиболее общим решением проблемы).
Возможно, вы захотите добавить определение для этой сущности в начале файла (ниже декларации xml):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
Также вы можете добавить больше объектов, таких как Ntilde, Aacute и т. Д.
В дополнение к ответу Виктора Гюго можно получить все допустимые ссылки на символы в файле 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>& –</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 ... для загрузки патча и комментариев.
При использовании следующего (без disable-output-escaping
!) Вы получите один неразрывный пробел:
<xsl:text> </xsl:text>
disable-output-escaping
для этого
Таблицы стилей XSLT должны быть правильно сформированными в формате XML. Поскольку " "
это не одна из пяти предопределенных сущностей XML , она не может быть напрямую включена в таблицу стилей. Поэтому возвращение к вашему решению " "
является идеальной заменой" "
вы должны использовать.
Пример:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
Вы также можете использовать:
<xsl:value-of select="'&nbsp'"/>
запомните усилитель после & или вы получите сообщение об ошибке
&nbsp;
(предполагая, что вы намерены использовать точку с запятой), который будет отображаться как
, а не как `` (nb-space).
Я пытался отобразить границы для пустой ячейки в таблице HTML. Мой старый трюк с использованием неразрывного пробела в пустых ячейках не работал с xslt. Я использовал разрыв строки с тем же эффектом. Я упоминаю об этом на всякий случай, потому что вы пытались использовать неразрывный пробел, чтобы дать некоторый контент «пустой» ячейке таблицы, чтобы включить границы ячейки.
<br/>
Попробуй использовать
<xsl:text> </xsl:text>
Но это зависит от используемого вами процессора XSLT: спецификация XSLT не требует, чтобы процессоры XSLT преобразовывали его в "
".
Хотя ответ уже был предоставлен @brabster и другими.
Я думаю, что более многократное решение будет:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>