On this page
内置节点(对于 XML)
Page Contents
请注意,这些内置函数返回的变量是由与其一起使用的节点变量实现生成的。这意味着返回的变量除了此处说明的内容外,还可以具有其他功能,例如,使用_时,由children
内置函数重新调整的序列也可以用作哈希值,也可以用作字符串,如有关 XML 处理的部分。
ancestors
包含所有节点祖先的序列,从直接父级开始到根节点结束。此内置结果也是一种方法,您可以通过该方法用节点的full-qualified name过滤结果。例如使用node?ancestors("section")
来获取名称为section
的所有祖先的序列。
children
包含该节点所有子节点(即直接后代节点)的序列。
XML:这与特殊的哈希键*
几乎相同,除了它返回所有节点,不仅返回元素。因此,可能的子节点是元素节点,文本节点,Comments 节点,处理指令节点等,但不是属性节点。属性节点从序列中排除。
node_name
返回一个字符串,该字符串用于确定在“访问”该节点时调用哪个用户定义的指令来处理该节点。请参阅:visit和recurse指令。
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 元素。