我不允许更改XML文件.我必须将一个和许多其他非法字符映射到XSL中的合法字符(可以是任何字符).因此,它必须以通用方式进行映射,而不仅仅是针对一种类型的字符.
解决方法 您可以定义一个字符映射,将不允许的字符映射到允许的字符,例如空格:<xsl:output indent="yes" method="HTML" use-character-maps="m1"/><xsl:character-map name="m1"> <xsl:output-character character="–" string=" "/></xsl:character-map>
作为替代方案,使用模板替换所有非法字符,根据http://www.w3.org/TR/xslt-xquery-serialization/#HTML_CHARDATA这些是控制字符#x7F-#x9F所以使用
<xsl:template match="text()"> <xsl:value-of select="replace(.,'[-Ÿ]',' ')"/></xsl:template>
应该确保输入文档中文本节点中的那些字符被空格替换.
作为另一种选择,您可以考虑使用xhtml命名空间和输出方法xhtml中的元素输出xhtml.
根据字符列表,将所有非法控制字符映射到空格的完整字符映射是
<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>
我使用XSLT 2.0和Saxon生成了该列表
<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>总结
以上是内存溢出为你收集整理的如何处理XSL中的非法HTML字符全部内容,希望文章能够帮你解决如何处理XSL中的非法HTML字符所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)