XSLT:node()?与node()*有何区别?

3

我正在翻译一些使用XSLT编写的遗留代码,以便将其替换为更广泛使用的语言,并且我遇到了一些无法找到参考资料的问题。

“<xsl:apply-templates select="." mode="#all"/>" 和

<xsl:variable name="following_actions" as="node()*">

并且

<xsl:variable name="following_actions" as="node()?">

我习惯于使用星号版本,它会给我一个记录列表,该列表与xsl:variable块中指定的某些条件匹配,但我不认为我以前见过问号版本。
欢迎直接相关的补救参考。FWIW,我相信我正在使用XSLT 2.0。

XSLT 2.0规范的第9节指出,“as”属性是一个序列类型;序列类型的语法在XPath 2.0规范的第2.5.3节中定义。你对“在xsl:variable块的正文中匹配某些条件的记录列表”的描述让我觉得你正在试图猜测语言的语义,而不是阅读规范;这似乎是一种危险的方法。 - Michael Kay
足够真实,尽管在我手头的实时数据示例和一些基本常识之间,通常有一种挖掘逻辑的方法。当我最不确定某些事情时,我会节俭地依靠你们这些优秀的人员。在我所做的所有代码挖掘中,XSLT 是我最难适应基本文档结构的地方,因此我感谢您提供具体的参考资料。 - David Kaufman
1个回答

3

与正则表达式一样,?*+表示选项和多重性:

  • node()表示1个节点。
  • node()?表示0个或1个节点。
  • node()+表示1个或多个节点。
  • node()*表示0个或多个节点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接