xpath中的逗号操作符,和c一样吗?

bma*_*ies 1 xpath xpath-2.0

    <xsl:variable name="html-output-name" 
         select="(if(@index and @index eq 'true') 
             then concat($default-name, '.html') 
             else (), 
         @html-output-name,
         @output-name, 
         $default-html)[1]" />
Run Code Online (Sandbox Code Playgroud)

我看到“if”在做什么,但我不确定如何理解命令中的其余项目,以及最后的 [1]。这是否等于“列表中的第一个非空项目?”

Mic*_*Kay 5

XPath 2.0 中的习惯用法(A, B, C)[1]通常表示“如果 A 存在,则 A;否则,如果 B 存在,则 B;否则,如果 C 存在,则 C;否则什么都没有”。我猜这与您的释义“列表中的第一个非空项目”相符。从技术上讲,它构建了一个序列,其中包含 A 选择的所有项目,然后是 B 选择的所有项目,然后是 C 选择的所有项目,然后选择列表中的第一个项目。但由于惰性求值和流水线操作,它不太可能真正构建整个列表。