输出php属性值里面的处理指令

Output php processing instruction inside attribute value

在我的 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。

使用包含一些您在其他地方不需要的字符的字符映射表,这是一个改编自 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

关于disable-output-escaping,据我所知,它在属性值中不起作用,你得到的结果不是disable-output-escaping的结果,而只是使用xsl:output method="html" (https://www.w3.org/TR/xslt-xquery-serialization/#HTML_ATTRIBS) 强制要求 'The HTML output method MUST NOT escape "<" characters occurring in attribute values.'.