结点(对于XML)内建函数

请注意,由这些内建函数返回的变量是由用于结点变量的实现生成的。 意思就是返回的变量可以有更多的特性,附加于它这里的状态。 比如,由内建函数 children 返回的序列和 XML DOM 结点 也可以被用作是哈希表或字符串, 这在 XML 处理部分 中有描述。

ancestors

一个包含所有结点祖先结点的序列,以直接父结点开始,以根结点结束。 该内建函数的结果也是一个方法,你可以用它和元素的 完全限定名 来过滤结果。 比如以名称 sectionnode?ancestors("section") 来获得所有祖先结点的序列。

children

一个包含该结点所有子结点(也就是直接后继结点)的序列。

XML:这和特殊的哈希表的键 * 几乎是一样的。 除了它返回所有结点,而不但是元素。所以可能的子结点是元素结点, 文本结点,注释结点,处理指令结点等,但 不是 属性结点。属性结点排除在序列之外。

node_name

当被"访问"时,返回用来决定哪个自定义指令来调用控制这个结点的字符串。 可以参见 visitrecurse 指令。

XML:如果结点是元素或属性,那么字符串就会是元素或属性的本地 (没有前缀)名字。否则,名称通常在结点类型之后以 @ 开始。 可以参见 该表格。 要注意这个结点名称与在DOM API中返回的结点名称不同; FreeMarker 结点名称的目标是给要处理结点的用户自定义指令命名。

node_namespace

返回结点命名空间的字符串。FreeMarker 没有为结点命名空间定义准确的含义; 它依赖于变量是怎么建模的。也可能结点没有定义任何结点命名空间。 这种情形下,该函数应该返回未定义的变量 (也就是 node?node_namespace?? 的值是 false),所以不能使用这个返回值。

XML:这种情况下的XML,就是XML命名空间的URI (比如 "http://www.w3.org/1999/xhtml")。 如果一个元素或属性结点没有使用XML命名空间,那么这个函数就返回一个空字符串。 对于其他XML结点这个函数返回未定义的变量。

node_type

描述结点类型的字符串。FreeMarker 没有对结点类型定义准确的含义; 它依赖于变量是怎么建模的。也可能结点并不支持结点类型。 在这种情形下,该函数就返回未定义值,所以就不能使用返回值。 (可以用 node?node_type?? 继续检查一个结点是否是支持类型属性。)

XML:可能的值是: "attribute""text""comment""document_fragment""document""document_type""element""entity""entity_reference""notation""pi"。 请注意,没有 "cdata" 类型,因为CDATA被认为是普通文本元素。

parent

在结点树中,返回该结点的直接父结点。根结点没有父结点, 所以对于根结点,表达式 node?parent?? 的值就是 false

XML:注意通过这个函数返回的值也是一个序列 (当编写 someNode[".."] 时,和XPath表达式 .. 的结果是一样的)。也要注意属性结点, 它返回属性所属的元素结点,尽管属性结点不被算作是元素的子结点。

root

该结点所属结点树的根结点。

XML:根据W3C,XML文档的根结点不是最顶层的元素结点, 而是文档本身,是最高元素的父结点。例如, 如果想得到被称为是 foo 的XML (所谓的"文档元素",不要和"文档"搞混了)的最高 元素, 那么不得不编写 someNode?root.foo。如果仅仅写了 someNode?root,那么得到的是文档本身,而不是文档元素。