提问人:MrD at KookerellaLtd 提问时间:11/15/2023 最后编辑:MrD at KookerellaLtd 更新时间:11/15/2023 访问量:27
序列类型语法和联合类型
sequence type syntax and union types
问:
我正在努力寻找一个很好的解释,说明XSLT 3+中的变量类型是可能的,什么是不可能的(我相信它使用XPath序列类型语法)
如果我有一个模板/函数/变量是 Foo 类型的元素,我会这样做
<xsl:variable name="foo" as="element(Foo)*">
<Foo/>
</xsl:variable>
我的具体问题是用注释注释一些输出(实际上是在模板中,但变量就可以了),但问题是一般的:
<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
有没有办法定义联合类型?
答:
1赞
Martin Honnen
11/15/2023
#1
有序列类型,然后是节点序列或 .node()
node()*
node()+
评论
0赞
MrD at KookerellaLtd
11/15/2023
但你不能说“(comment() |元素(Foo))*“?
0赞
Martin Honnen
11/15/2023
@MrDatKookerellaLtd,请看 Michael Kay 的回答。
0赞
MrD at KookerellaLtd
11/15/2023
我会在陪审团的分歧决定中把它交给迈克尔:-)
2赞
Michael Kay
11/15/2023
#2
XSLT 3.0(或 XPath 3.0)中的类型系统不包括一般联合运算符。您可以定义任意两个原子类型的并集,但不能定义其他类型(如节点类型、数组类型或映射类型)的并集。你能做的最好的事情就是使用“最不常见的超类型”,即 和 是 。element()
comment()
node()
XSLT 匹配模式允许 ,但这是一种匹配模式,而不是项类型,因此不能在属性中使用。match="element()|comment()"
as
评论