Перейти к содержанию

xsl:character-map

Определяет именованную карту символов для использования при сериализации.

Доступно в XSLT 1.0 и более поздних версиях. Доступно во всех редакциях Saxon.

Атрибуты

name
eqname
Имя карты символов, на которую можно ссылаться из атрибута use-character-maps в xsl:output.
use-character-maps?
eqnames
Карты символов могут быть собраны из других карт символов с помощью атрибута use-character-maps. Он содержит разделенный пробелами список имен других карт символов, которые должны быть включены в данную карту символов.

Заметки по реализации Saxon

Использование карт символов может быть дорогостоящим во время выполнения. В настоящее время Saxon не предпринимает специальных попыток оптимизировать их использование: если используются карты символов, то каждый выводимый символ будет просматриваться в хэш-таблице на предмет наличия строки-заменителя.

Saxon 9.8 расширяет возможности использования символьных карт, чтобы они также применялись к методу вывода JSON. Например, карта символов, которая отображает "/" на "/", не позволит методу вывода JSON экранировать "/" как "\/".

Подробности

Элемент xsl:character-map содержит набор элементов xsl:output-character, каждый из которых определяет выходное представление данного символа Unicode. Символ задается с помощью атрибута character, строка, которая должна заменить этот символ при сериализации, задается с помощью атрибута string. Оба атрибута являются обязательными.

Заменяющая строка выводится как есть, даже если она содержит специальные символы (разметку). Так, например, вы можете определить <xsl:output-character character="&#xa0;" string="&nbsp;"/> для обеспечения вывода символов NBSP с использованием ссылки на сущность &nbsp;.

Карты символов позволяют создавать выходные данные, которые не являются хорошо сформированным XML, и таким образом они обеспечивают замену disable-output-escaping. Полезной техникой является использование символов в области частного использования Unicode (от xE000 до xF8FF) в качестве символов, которые, если они присутствуют в дереве результатов, будут отображены в специальные строки на выходе. Например, если вы хотите создать собственный XML-подобный формат, использующий такие теги, как <!IF>, <!THEN> и <!ELSE>, то вы можете отобразить их на три символа xE000, xE001, xE002 (которые, в свою очередь, вы можете определить как сущности, чтобы они могли быть записаны символически в вашей таблице стилей или исходном документе).

Карты символов предпочтительнее, чем disable-output-escaping, потому что они не зависят от тесного интерфейса между механизмом преобразования и сериализатором и не искажают модель данных. Специальные символы могут храниться в DOM, передаваться через интерфейс SAX или манипулироваться любым другим способом, прежде чем будут окончательно отображены сериализатором.

Ссылки

См. также

Комментарии