结点变量

结点变量体现了树形结构中的结点。结点变量的引入是为了帮助用户 在数据模型中处理XML文档, 但是它们也可以用于构建树状模型。如需要有关从模板语言角度考虑的结点信息, 那么可以 阅读之前章节

结点变量有下列属性,它们都由 TemplateNodeModel 接口的方法提供:

  • 基本属性:

    • TemplateSequenceModel getChildNodes(): 一个结点的子结点序列(除非这个结点是叶子结点,这时方法返回一个空序列或者是null)。 子结点本身应该也是结点变量。

    • TemplateNodeModel getParentNode(): 一个结点只有一个父结点(除非这个结点是结点树的根结点, 这时方法返回null)。

  • 可选属性。如果一个属性在具体的使用中没有意义, 那对应的方法应该返回null

    • String getNodeName(): 结点名称也是宏的名称,当使用 recursevisit指令时, 它用来控制结点。因此,如果想通过结点使用这些指令, 那么结点的名称是 必须的

    • String getNodeType():在XML中: "element""text""comment"等。如果这些信息可用, 就是通过 recursevisit 指令来查找结点的默认处理宏。而且,它对其他有具体用途的应用程序也是有用的。

    • String getNamespaceURI(): 这个结点所属的命名空间(和用于库的FTL命名空间无关)。例如,在XML中, 这就是元素和属性所属XML命名空间的URI。这个信息如果可用,就是通过 recursevisit 指令来查找存储控制宏的FTL命名空间。

在FTL里,结点属性的直接使用可以通过 内建函数 node完成, 还有 visitrecurse 宏。

在很多用例中,实现了 TemplateNodeModel 接口和其它接口的变量,因为结点变量属性仅仅提供基本的结点间导航的方法。 需要具体的例子,请参考 FreeMarker如何处理XML 部分。