0

在我的 XSLT(2.0 - 输出方法是 html)中,我有这个:

<img>
    <xsl:attribute name="href">
        <xsl:text disable-output-escaping="yes">&lt;?php echo get_url(); ?&gt;</xsl:text>
    </xsl:attribute>
</img>

我想要的输出如下:

<img href="<?php echo get_url(); ?>">

我得到的输出如下:

<img href="<?php echo get_url(); ?&gt;">

尝试了一堆不同的东西来让“>”出现在输出中,而不是> (CDATA 标记的部分等)但似乎没有任何效果。奇怪的是小于号可以正常工作,但大于号不行。我正在使用 Saxon-PE 9.5.1.7。

4

1 回答 1

0

将字符映射与您在其他地方不需要的一些字符一起使用,这是一个改编自 XSLT 2.0 规范的示例 ( https://www.w3.org/TR/xslt20/#character-maps ):

<img href="«?php echo get_url(); ?»"/>

<xsl:output method="html" use-character-maps="m1"/>

<xsl:character-map name="m1">
    <xsl:output-character character="«" string="&lt;"/>
    <xsl:output-character character="»" string="&gt;"/>
</xsl:character-map>

在线示例位于http://xsltransform.net/93dEHFP

至于禁用输出转义,据我所知,它在属性值中不起作用,您得到的结果不是禁用输出转义的结果,而只是使用xsl:output method="html"https://www.w3. org/TR/xslt-xquery-serialization/#HTML_ATTRIBS)强制“HTML 输出方法不得转义属性值中出现的“<”字符。

于 2017-06-06T18:50:25.830 回答