Details

对应于 DOM 树中单个节点的每个变量都是类型为 node 和类型为 hash 的多类型变量(对于程序员:实现TemplateNodeModelTemplateHashModel)。因此,您可以将node built-ins与它们一起使用。哈希键被解释为 XPath 表达式,下表中显示的特殊键除外。一些节点变量也具有字符串类型,因此您可以将它们用作字符串变量(对于程序员:它们实现TemplateScalarModel)。

节点类型(?node_type) 节点名称(?node_name) 字符串值(例如<p>${node}) 特殊哈希键
"document" "@document" 没有字符串值。 (尝试将其用作字符串时出错.) elementName , "prefix:elementName" , * , ** , @@markup , @@nested_markup , @@text , @@local_name , @@qname , @@namespace
"element" "name":元素的名称。这是本地名称(即没有名称空间前缀的名称)。 如果没有元素子级,则所有文本节点子级的文本都串联在一起。否则,当您尝试将其用作字符串时出错。 elementName , "prefix:elementName" , * , ** , @attrName , "@prefix:attrName" , @@ , "@*" , @@start_tag , @@end_tag , @@attributes_markup , @@next_sibling_element , @@previous_sibling_element , @@markup , @@nested_markup , @@text , @@local_name , @@qname , @@namespace
"text" "@text" Literals 本身。 @@markup , @@nested_markup , @@text , @@local_name , @@qname , @@namespace
"pi" "@pi$target" 目标名称和?>之间的部分。 @@markup , @@nested_markup , @@text , @@local_name , @@qname , @@namespace
"comment" "@comment" Comments 文本,不包含定界符<!----> @@markup , @@nested_markup , @@text , @@local_name , @@qname , @@namespace
"attribute" "name":属性名称。这是本地名称(即没有名称空间前缀的名称)。 属性的值。 @@markup , @@nested_markup , @@text , @@qname , @@local_name , @@qname , @@namespace
"document_type" "@document_type$name"name是文档元素的名称。 没有字符串值。 (尝试将其用作字符串时出错.) @@markup , @@nested_markup , @@text , @@local_name , @@qname , @@namespace

Notes:

特殊哈希键的含义:

Node sequences

许多特殊的哈希键(在上面的列表中指示)以及导致节点集的 XPath 表达式(请参见XPath recommendation)返回节点序列。

如果这些节点序列恰好存储 1 个子变量,它们本身也将充当子变量。例如,如果元素book仅有一个title元素子元素,则${book.title[0]}将与${book.title}相同。

返回空节点序列是正常情况。例如,如果在具体的 XML 文档中,元素book没有子元素chapter,则book.chapter导致空节点序列。谨防!这也意味着book.chaptre(注意拼写错误)也将返回空节点序列,并且不会因错误而停止。另外,book.chaptre??(请注意 Importing 错误)将返回true,因为存在空序列,因此您必须使用book.chaptre[0]??进行检查。

不存储 1 个节点(但 0 个或多于 1 个节点)的节点序列也支持上述某些哈希键。即,支持以下特殊键:

当您在包含多个节点或 1 个或多个节点的节点序列上应用上述特殊键之一时,则对于序列中的每个节点(特殊键确实有意义,例如,文本节点将跳过键*@foo) ,将按对单个节点的说明应用特殊键,并将结果连接起来以形成最终结果。结果将按照节点 Sequences 出现在相应节点中的 Sequences 进行连接。串联是指字符串或序列的串联,具体取决于结果的类型。如果特殊键将导致单个节点的字符串,则对于多个节点,结果也将是单个字符串(串联的单个节点的结果),并且如果特殊键将返回单个节点的序列,则对于多个节点,结果也是单个序列。如果您在序列上应用了特殊键,则该序列中有 0 个节点,则字符串结果分别为空字符串或空序列。

XPath 表达式可以与节点序列一起使用。但是,由于 Xalan XPath 实现的局限性,对于 0 个或 1 个以上的节点,仅当您使用 Jaxen 而不是 Xalan 时,它才有效。

上一章 首页 下一章