如何在xslt中使用xml数据源将unicode转换为iso?

时间:2014-07-17 05:57:45

标签: xml xslt xslt-1.0 xslt-2.0

需要将XML的所有unicode(~)从XML(entities.xml)转换为iso(& tilde;),其中所有这些值都是stroed ....

entities.xml: -

<entities>
<entity iso="eacute" unicode="x00e9"/>
<entity iso="iacute" unicode="x00ed"/>
</entities>

输入: -

<?xml version="1.0" encoding="UTF-8"?>
<chapter>
<title>Chapt&#x00e9;r Tilt&#x00e9;</title>
<body>
    <p>Th&#x00ed;s is t&#x00e9;xt...</p>
    <p>Th&#x00ed;s is t&#x00e9;xt...</p>
    <p>Th&#x00ed;s is t&#x00e9;xt...</p>
    <p>Th&#x00ed;s is t&#x00e9;xt...</p>
    <p>Th&#x00ed;s is t&#x00e9;xt...</p>
</body>    
</chapter>

输出应为: -

<chapter>
<title>Chapt&eacute;r Tilt&eacute;</title>
<body>
    <p>Th&iacute;s is t&eacute;xt...</p>
    <p>Th&iacute;s is t&eacute;xt...</p>
    <p>Th&iacute;s is t&eacute;xt...</p>
    <p>Th&iacute;s is t&eacute;xt...</p>
    <p>Th&iacute;s is t&eacute;xt...</p>
</body>    

还有很多其他值也在entities.xml中,如....

    <entity iso="nbsp" unicode="x00a0"/>
<entity iso="ordf" unicode="x00aa"/>
<entity iso="ordm" unicode="x00ba"/>
<entity iso="para" unicode="x00b6"/>
<entity iso="plusmn" unicode="x00b1"/>
<entity iso="pound" unicode="x00a3"/>
<entity iso="raquo" unicode="x00bb"/>
<entity iso="reg" unicode="x00ae"/>
<entity iso="sect" unicode="x00a7"/>

1 个答案:

答案 0 :(得分:2)

您可以使用xslt-2.0使用character-map来实现这一目标。

尝试以下样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0">

    <xsl:character-map name="CharMap">
        <xsl:output-character character="&#x00ed;" string="&amp;iacute;"/>
        <xsl:output-character character="&#x00e9;" string="&amp;eacute;"/>
    </xsl:character-map>

    <xsl:output indent="yes" use-character-maps="CharMap"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>