我希望生成一个通用代码来解析XSLT中的特殊字符 [英] I wish to generate a generic code for parsing special characters in xslt

查看:24
本文介绍了我希望生成一个通用代码来解析XSLT中的特殊字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望生成一个通用代码来解析XSLT中的特殊字符。 我希望将在XML文档的任何节点中找到的所有特殊字符替换为我选择的符号。

例如特殊字符="&;#174";也"&;#169";等等

我尝试了类似以下内容的操作,但没有任何反应。

<xsl:template match="*">
    <xsl:choose>
        <xsl:when test="contains(.,'&amp;ndash;')">
            <xsl:value-of select="replace(.,'&amp;ndash;','-')" />
        </xsl:when>
    </xsl:choose>
</xsl:template>

字符输出功能为:

<xsl:output-character character="&#160;" string="&amp;nbsp;" />

我希望做相反的事情,即用字符替换字符串(将&amp;nbsp;替换为&#160;)

推荐答案

如果可以使用XSLT2.0,请使用字符映射。您可以找到规范的相关部分here

将字符映射的用法定义为样式表的顶级元素:

<xsl:output use-character-maps="math-ops"/>
然后,确定您希望在序列化过程中使用您选择的字符串替换哪些字符。字符映射由output-character元素组成,其中@character属性表示要替换的字符,@string表示要替换的字符。

下面的示例确保正确序列化数学运算符(即,为简单起见,它输出大写字母)。

<xsl:character-map name="math-ops">
    <xsl:output-character character="&#x03A3;" string="SIGMA HERE"/><!--Unicode Character 'GREEK CAPITAL LETTER SIGMA' (U+03A3)-->
    <xsl:output-character character="&#x03A0;" string="PI HERE"/><!--Unicode Character 'GREEK CAPITAL LETTER PI' (U+03A0)-->
    <xsl:output-character character="&#x2713;" string="CHECK MARK"/><!--Unicode Character 'CHECK MARK' (U+2713)-->
</xsl:character-map>
请注意,这只会影响实际的序列化,而不会影响您使用xsl:result-document生成的输出。

若要将字符映射也应用于此输出,请在相关result-document元素上指定use-character-maps属性:

<xsl:result-document href="helloworld.xml" use-character-maps="math-ops">
  <hello>
    <world/>
  </hello>
</xsl:result-document>

这篇关于我希望生成一个通用代码来解析XSLT中的特殊字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆