è possibile definire una mappa dei caratteri che mappa i caratteri non sono ammessi a un permesso, per esempio uno spazio:
<xsl:output indent="yes" method="html" use-character-maps="m1"/>
<xsl:character-map name="m1">
<xsl:output-character character="–" string=" "/>
</xsl:character-map>
In alternativa, utilizzare un modello di sostituzione di tutti i caratteri non validi, secondo http://www.w3.org/TR/xslt-xquery-serialization/#HTML_CHARDATA questi sono il controllo caratteri # x7f- # X9F in modo da utilizzare
<xsl:template match="text()">
<xsl:value-of select="replace(., '[-Ÿ]', ' ')"/>
</xsl:template>
dovrebbe assicurarsi che tali personaggi di nodi di testo nel documento di input sono sostituiti da uno spazi.
Come alternativa, è possibile prendere in considerazione l'output di XHTML con elementi negli spazi dei nomi XHTML e nel metodo di output xhtml
.
Sulla base della lista di caratteri, una mappa completa carattere mappatura di tutti i caratteri di controllo illegali per uno spazio è
<xsl:character-map
name="no-control-characters">
<xsl:output-character character="" string=" "/>
<xsl:output-character character="€" string=" "/>
<xsl:output-character character="" string=" "/>
<xsl:output-character character="‚" string=" "/>
<xsl:output-character character="ƒ" string=" "/>
<xsl:output-character character="„" string=" "/>
<xsl:output-character character="…" string=" "/>
<xsl:output-character character="†" string=" "/>
<xsl:output-character character="‡" string=" "/>
<xsl:output-character character="ˆ" string=" "/>
<xsl:output-character character="‰" string=" "/>
<xsl:output-character character="Š" string=" "/>
<xsl:output-character character="‹" string=" "/>
<xsl:output-character character="Œ" string=" "/>
<xsl:output-character character="" string=" "/>
<xsl:output-character character="Ž" string=" "/>
<xsl:output-character character="" string=" "/>
<xsl:output-character character="" string=" "/>
<xsl:output-character character="‘" string=" "/>
<xsl:output-character character="’" string=" "/>
<xsl:output-character character="“" string=" "/>
<xsl:output-character character="”" string=" "/>
<xsl:output-character character="•" string=" "/>
<xsl:output-character character="–" string=" "/>
<xsl:output-character character="—" string=" "/>
<xsl:output-character character="˜" string=" "/>
<xsl:output-character character="™" string=" "/>
<xsl:output-character character="š" string=" "/>
<xsl:output-character character="›" string=" "/>
<xsl:output-character character="œ" string=" "/>
<xsl:output-character character="" string=" "/>
<xsl:output-character character="ž" string=" "/>
<xsl:output-character character="Ÿ" string=" "/>
</xsl:character-map>
ho generato quella lista con XSLT 2.0 e sassone, utilizzando
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"
exclude-result-prefixes="xs axsl">
<xsl:param name="start" as="xs:integer" select="127"/>
<xsl:param name="end" as="xs:integer" select="159"/>
<xsl:param name="replacement" as="xs:string" select="' '"/>
<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>
<xsl:output method="xml" indent="yes" use-character-maps="character-reference"/>
<xsl:character-map name="character-reference">
<xsl:output-character character="«" string="&"/>
</xsl:character-map>
<xsl:template name="main">
<axsl:character-map name="no-control-characters">
<xsl:for-each select="$start to $end">
<axsl:output-character character="«#{.};" string="{$replacement}"/>
</xsl:for-each>
</axsl:character-map>
</xsl:template>
</xsl:stylesheet>
fonte
2014-04-18 15:13:01
Grazie, ha risolto il problema per 150 decimali. Ma come posso mappare più di 1 tipo? C'è un modo generico? – US1925
Puoi inserire tutti gli elementi 'xsl: output-character' nella' xsl: character-map' di cui hai bisogno. –