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



需要将XML的所有unicode(~)转换为XML(entities.xml)中的iso(˜),其中所有这些值都是格式化的....

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"/>

您可以使用使用character-map的xslt-2.0实现。

试试下面的样式表:

<?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>

相关内容

  • 没有找到相关文章

最新更新