我希望生成一个通用代码来解析xslt中的特殊字符

时间:2014-01-24 09:23:32

标签: xml xslt replace xslt-2.0

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

例如special characters =“&#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;

1 个答案:

答案 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="&#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生成的输出。

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

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