You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT 3+变量类型疑问:能否用联合类型兼容元素与注释?

XSLT 3+ 变量类型定义的可行场景与联合类型解决方案

可行场景

当需要定义仅包含<Foo>元素的变量时,使用element(Foo)*作为类型约束完全可行,示例代码如下:

<xsl:variable name="foo" as="element(Foo)*">
    <Foo/>
</xsl:variable>

报错场景

如果变量内容同时包含注释节点和<Foo>元素,继续使用element(Foo)*会触发类型不匹配错误。比如下面的代码:

<xsl:variable name="foo" as="element(Foo)*">
    <xsl:comment>Foo</xsl:comment>
    <Foo/>
</xsl:variable>

在Saxon 11.4中会抛出错误:

the supplied value <!--...--> does not match. The supplied value is a comment node

解决方案:使用联合类型

完全可以通过联合类型解决这个问题。只需把变量的类型约束修改为注释节点与<Foo>元素的联合序列类型,这样序列中的注释和<Foo>元素都能符合类型要求。修改后的代码如下:

<xsl:variable name="foo" as="(element(Foo) | comment())*">
    <xsl:comment>Foo</xsl:comment>
    <Foo/>
</xsl:variable>

这里的(element(Foo) | comment())*表示变量值可以是任意数量(包括零个)的<Foo>元素或注释节点组成的序列,完美匹配所需的内容结构。

内容的提问来源于stack exchange,提问作者MrD at KookerellaLtd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:54:53