2011-03-18 39 views
1
<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]" /> 

我看到'如果'在做什么,但我不知道如何理解命令中剩余的项目,然后结束[1]。这是否加起来“的第一个非空的项目列表中的“xpath中的逗号运算符,是否像c?

回答

1

http://www.w3.org/TR/xpath20/#construct_seq

定义:一种方式构建 序列是使用逗号 操作,其评估每个 其操作数并连接所述 得到的序列,为了,成 单个结果序列

偏乙NF:

[2] Expr ::=ExprSingle(","ExprSingle)*

而且从http://www.w3.org/TR/xpath20/#id-filter-expr

[定义:过滤器表达式 简单地包括:主 表达后跟零个或更多 predicates的。所述 滤波器表达式的结果包括由初级 表达,通过施加按顺序将每 谓词过滤返回的 物品,从左 向右工作。如果没有谓词是指定 ,其结果仅仅是 结果的主要表达。由 过滤器表达式返回的项目的排序 与主要的 表达式的结果中的 顺序相同。上下文位置是 根据 顺序位置结果 顺序分配给项目。第一个背景位置 为1

问题

这是否加起来“第一 非空项列表中?

答案:不完全。这将选择列表中的第一个项目。没有空的项目,但空序列。而且因为没有嵌套序列(形式化元组),所以它们只是作为一个平面序列连接起来。

4

XPath 2.0中的惯用语(A, B, C)[1]通常用于表示“如果A存在,则A;否则如果B存在,则B;否则如果C存在,则C;否则不存在。我猜你的意思是“列表中的第一个非空项目”。从技术上讲,它构建了一个序列,其中包含由A选择的所有项目,然后是由B选择的所有项目,然后是由C选择的所有项目,然后选择列表中的第一个项目。但由于懒惰的评估和流水线,实际上它不可能构建整个列表。

+0

我很荣幸能从Saxon的作者处得到答案。 – bmargulies 2011-03-21 00:55:44