内置节点(对于 XML)

Page Contents

请注意,这些内置函数返回的变量是由与其一起使用的节点变量实现生成的。这意味着返回的变量除了此处说明的内容外,还可以具有其他功能,例如,使用_时,由children内置函数重新调整的序列也可以用作哈希值,也可以用作字符串,如有关 XML 处理的部分

ancestors

包含所有节点祖先的序列,从直接父级开始到根节点结束。此内置结果也是一种方法,您可以通过该方法用节点的full-qualified name过滤结果。例如使用node?ancestors("section")来获取名称为section的所有祖先的序列。

children

包含该节点所有子节点(即直接后代节点)的序列。

XML:这与特殊的哈希键*几乎相同,除了它返回所有节点,不仅返回元素。因此,可能的子节点是元素节点,文本节点,Comments 节点,处理指令节点等,但不是属性节点。属性节点从序列中排除。

node_name

返回一个字符串,该字符串用于确定在“访问”该节点时调用哪个用户定义的指令来处理该节点。请参阅:visitrecurse指令。

XML:如果节点是元素或属性,则字符串将是元素或属性的本地(无前缀)名称。否则,名称通常以@开头,后跟节点类型。参见this table。请注意,此节点名称与 DOM API 中返回的节点名称不同。 FreeMarker 节点名称的目的是给出将用于处理该节点的 used-defined 指令的名称。

next_sibling

Note:

此内置版本仅从 2.3.26 开始可用

返回节点的以下同级节点。 (如果树中的两个节点处于同一级别并且彼此直接相邻,则称它们为兄弟姐妹.)如果没有这样的节点,则表达式node?next_sibling??的计算结果为false

XML:请注意,此内置函数返回的值也是一个长度为 1 的序列(与某些 XPath 表达式的结果相同),但是,如果没有下一个同级,结果将是一个缺失值(空)而不是空值序列。还要注意,对于 XML 元素节点,您还可以使用node.@@next_sibling_element,如果您想忽略将两个看似兄弟元素分隔开的空格,这是很实用的。查看更多here...

Note:

对于自定义节点实现,仅当实现freemarker.template.TemplateNodeModelEx接口时才支持此内置功能。

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??检查节点是否支持 type 属性.)

XML:可能的值为:"attribute""text""comment""document_fragment""document""document_type""element""entity""entity_reference""notation""pi"。请注意,没有"cdata"类型,因为 CDATA 被视为纯文本节点。

parent

返回节点,它是节点树中此节点的直接父级。根节点没有父节点,因此对于根节点,表达式node?parent??的值为false

XML:请注意,此内置函数返回的值也是一个序列(与 XPath 表达式..的结果相同,当您编写someNode[".."]时),但是,如果没有父级,结果将是缺少的值(空)而不是空序列。还要注意,对于属性节点,尽管该属性节点不被视为元素的子元素,但它会返回该属性所属的元素。

previous_sibling

Note:

此内置版本仅从 2.3.26 开始可用

返回节点的前一个兄弟节点。除了方向,它与next_sibling相同,因此请查看更多详细信息there...

Note:

对于自定义节点实现,仅当实现freemarker.template.TemplateNodeModelEx接口时才支持此内置功能。

root

作为该节点所属的节点树的根的节点。

XML:根据 W3C,XML 文档的根不是最高元素节点,而是文档本身,它是最高元素的父级。例如,如果要获取 XML 的最高元素(即所谓的“文档元素”;不要将其与“文档”混合使用),称为foo,则必须编写someNode?root.foo。如果只写someNode?root,那么您将获得文档本身,而不是 document 元素。