我希望生成一个用于解析xslt中特殊字符的通用代码。 我希望用我选择的符号替换在xml文档的任何节点中找到的所有特殊字符。
例如special characters =“&#174”;也是“&#169”;等等
我尝试了类似的事情,但没有任何反应。
<xsl:template match="*">
<xsl:choose>
<xsl:when test="contains(.,'&ndash;')">
<xsl:value-of select="replace(.,'&ndash;','-')" />
</xsl:when>
</xsl:choose>
</xsl:template>
字符输出的功能是:
<xsl:output-character character=" " string="&nbsp;" />
我希望做相反的事情,即用字符替换字符串(用&nbsp;
替换 
)
答案 0 :(得分:1)
如果您可以使用XSLT 2.0,请使用字符映射。您可以找到规范here的相关部分。
将字符映射的用法定义为样式表的顶级元素:
<xsl:output use-character-maps="math-ops"/>
然后,在序列化期间确定要用您选择的字符串替换哪些字符。字符映射包含output-character
个元素,其中@character
属性表示您要替换的字符,@string
替换它。
以下示例确保数学运算符正确序列化(即,为简单起见,它会输出大写字母)。
<xsl:character-map name="math-ops">
<xsl:output-character character="Σ" string="SIGMA HERE"/><!--Unicode Character 'GREEK CAPITAL LETTER SIGMA' (U+03A3)-->
<xsl:output-character character="Π" string="PI HERE"/><!--Unicode Character 'GREEK CAPITAL LETTER PI' (U+03A0)-->
<xsl:output-character character="✓" string="CHECK MARK"/><!--Unicode Character 'CHECK MARK' (U+2713)-->
</xsl:character-map>
请注意,这仅对实际序列化产生影响,而不会影响您使用xsl:result-document
生成的输出。
要将字符映射应用于此输出,请在相关use-character-maps
元素上指定result-document
属性:
<xsl:result-document href="helloworld.xml" use-character-maps="math-ops">
<hello>
<world/>
</hello>
</xsl:result-document>