【问题标题】:XSLT3 can disable-output-escaping be used in same template as expand-text=yes?XSLT3 是否可以在与 expand-text=yes 相同的模板中使用禁用输出转义?
【发布时间】:2020-04-10 07:28:23
【问题描述】:

我注意到在 Saxon 的 XSLT3 中尝试使用禁用输出转义时,如果在样式表甚至给定的匹配模板上将 expand-text 设置为 yes,它将不起作用

以下代码(在自身运行时)显示了该问题(在 Saxon 9.8.0.12 中)。 我知道这是一个不寻常的组合,并且通常要不惜一切代价避免禁用输出转义,但只是试图确定正确的行为。

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

    <xsl:template match="/">
        <out>
            <xsl:apply-templates/>
        </out>
    </xsl:template>
    <xsl:template match="xsl:stylesheet" expand-text="true">
        <expandtext>
            <count>{count(*)}</count>
            <xsl:text disable-output-escaping="true">&lt;test/&gt;</xsl:text>
        </expandtext>
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="xsl:template" expand-text="false">
        <notexpandtext>
            <count>{count(*)}</count>
            <xsl:text disable-output-escaping="true">&lt;test/&gt;</xsl:text>
        </notexpandtext>
    </xsl:template>
</xsl:stylesheet>

生产

<?xml version="1.0" encoding="UTF-8"?>
<out>
    <expandtext><count>3</count>&lt;test/&gt;</expandtext>
    <notexpandtext><count>{count(*)}</count><test/></notexpandtext>
    <notexpandtext><count>{count(*)}</count><test/></notexpandtext>
    <notexpandtext><count>{count(*)}</count><test/></notexpandtext>
</out>

【问题讨论】:

  • 我可以确认行为。解决方法:&lt;count xsl:expand-text="true"&gt;
  • 谢谢我不是在寻找解决方法,这只是一个测试用例。

标签: xslt saxon xslt-3.0


【解决方案1】:

这里确实有一个错误,我已经登录了

https://saxonica.plan.io/issues/4412

expand-text="yes" 范围内的 xsl:text 指令在内部实现为与“普通旧”xsl:text 元素不同类型的表达式,新表达式忽略了支持 d-o-e 的需要。

我在https://github.com/w3c/xslt30-test 的 XSLT 3.0 测试套件中添加了一个测试用例 disable-output-escaping/doe-0201

【讨论】:

  • 谢谢迈克尔,这只是我偶然发现的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2013-06-26
  • 2020-03-12
相关资源
最近更新 更多