V ojedinělých případech potřebujeme, aby transformace
vygenerovala výstup, který porušuje syntaktická pravidla jazyků HTML
a XML. Například potřebujeme do výstupu vygenerovat značky
<%
a %>
, které skriptovací
prostředí jako ASP nebo JSP používají pro oddělení HTML kódu od
spustitelných částí vloženého kódu. V XSLT 1.0 pro tyto účely šlo
použít atribut disable-output-escaping
. Nová verze
jazyka XSLT přidává možnost mnohem elegantnějšího řešení.
Transformace může obsahovat definici mapování znaků. Pro každý znak může být určeno, jakým znakem nebo posloupností znaků má být nahrazen při generování (serializaci) výstupu. Vše ukazuje následující příklad.
Příklad 14.9. Mapování znaků při serializaci –
mapovani-znaku.xsl
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <!-- Uživatelské definování znaků při serializaci --> <xsl:character-map name="moje-mapa"> <!-- Pevná mezera se zapíše jako --> <xsl:output-character character=" " string="&nbsp;"/> <!-- Znaky ◄ a ► se převedou na ASP oddělovače <% a %> --> <xsl:output-character character="◄" string="<%"/> <xsl:output-character character="►" string="%>"/> </xsl:character-map> <!-- Pro výstup se bude používat námi definovaná mapa --> <xsl:output use-character-maps="moje-mapa"/> <xsl:template match="/"> <html> <head> <title>Testovací stránka</title> </head> <body> V lese žije medvěd. Aktuální čas: ◄= Now()► </body> </html> </xsl:template> </xsl:stylesheet>
Transformace přitom vygeneruje následující výstup.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Testovací stránka</title> </head> <body> V lese žije medvěd. Aktuální čas: <%= Now()%> </body> </html>