保持""" XSLT转换中的实体

时间:2015-09-01 05:02:56

标签: xml xslt

我有以下XML:

<doc>
    <chap>
        &gt;The bowler &gt;delivers&lt; the ball &lt;
        &gt;to the batsman who attempts to &lt;
        &gt;hit the ball &quot; with his  &quot;  bat away from &lt;
        &gt;the fielders so he can run to the &lt;
        &gt;other end of the pitch and score a run.&lt;
    </chap>
</doc>

我必须编写一些XSL来为这个输入XML做一些任务。但是当我使用...

复制所有节点时
<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

...在结果文件中,而不是&quot;。在生成的文件中,这些文件将转换为"。我不希望这种情况发生。

<doc>
    <chap>
        &gt;The bowler &gt;delivers&lt; the ball &lt;
        &gt;to the batsman who attempts to &lt;
        &gt;hit the ball " with his  "  bat away from &lt;
        &gt;the fielders so he can run to the &lt;
        &gt;other end of the pitch and score a run.&lt;
    </chap>
</doc>

是否有任何方法可以保留&quot;,因为它在生成的XML中?

1 个答案:

答案 0 :(得分:3)

您可以使用xsl:use-character-maps,如下所示:

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

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

    <xsl:character-map name="CharMap">
        <xsl:output-character character="&quot;" string="&amp;quot;"/>
    </xsl:character-map>

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