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