如何正确禁用 XSL 和 Saxon 的输出转义?

问题描述 投票:0回答:1

我正在使用 Saxon-He 来处理此代码(我使用 this post 来了解这个想法):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:key name="elelsById" match="elel" use="@elelEntity" />

    <xsl:template match="/">
        <xsl:text disable-output-escaping="yes">&#xA;&lt;!DOCTYPE dmodule [&#xA;</xsl:text>
        <xsl:text disable-output-escaping="yes">&lt;!NOTATION cgm PUBLIC "-//USA-DOD//NOTATION Computer Graphics Metafile//EN"&gt;&#xA;</xsl:text>

        <xsl:for-each select="//elel[generate-id() = generate-id(key('elelsById', @elelEntity)[1])]">
            <xsl:text disable-output-escaping="yes">&lt;!ENTITY </xsl:text>
            <xsl:value-of select="@elelEntity" />
            <xsl:text> SYSTEM "</xsl:text>
            <xsl:value-of select="@elelEntity" />
            <xsl:text disable-output-escaping="yes">.cgm" NDATA cgm &gt;&#xA;</xsl:text>
        </xsl:for-each>

        <xsl:text disable-output-escaping="yes">]&gt;&#xA;</xsl:text>
        <xsl:apply-templates/>
    </xsl:template>

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

我的输出如下所示:

<?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE dmodule [
&lt;!NOTATION cgm PUBLIC "-//USA-DOD//NOTATION Computer Graphics Metafile//EN"&gt;
&lt;!ENTITY ELEL-A-01 SYSTEM "ELEL-A-01.cgm" NDATA cgm &gt;
&lt;!ENTITY ELEL-A-05 SYSTEM "ELEL-A-05.cgm" NDATA cgm &gt;
]&gt;
<!-- xml content -->

我期待

&lt;
&gt;
会被替换为
<
>

我删除了

disable-output-escaping="yes"
,结果是一样的。

我看到 Saxon 包含此扩展

saxon:doctype
,但它仅适用于 Saxon-PE 或 Saxon-EE。

我在实施中缺少什么?

xml xslt xslt-2.0 saxon
1个回答
0
投票

如果您让 Saxon 序列化结果,以便它可以考虑 DOE,那么您的代码应该可以工作;如果这不起作用,通常意味着您正在使用 DOM 或 XDM 树等转换目标,而不是文件或流。

您可以看到 您的代码的一部分与 Saxon HE 一起在线使用。结果有例如

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dmodule [ <!NOTATION cgm PUBLIC "-//USA-DOD//NOTATION Computer Graphics Metafile//EN"> ]> <dmodule>...</dmodule>
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.