blob: a8577ced710e3d807af52cc025273502bf69c431 [file] [log] [blame]
<!doctype html>
<!-- Generated by FreeMarker/Docgen from DocBook -->
<html lang="en" class="page-type-section">
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8">
<title>Node variables - FreeMarker Manual</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="format-detection" content="telephone=no">
<meta property="og:site_name" content="FreeMarker Manual">
<meta property="og:title" content="Node variables">
<meta property="og:locale" content="en_US">
<meta property="og:url" content="http://example.com/pgui_datamodel_node.html">
<link rel="canonical" href="http://example.com/pgui_datamodel_node.html">
<link rel="icon" href="favicon.png" type="image/png">
<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1594338519184">
</head>
<body itemscope itemtype="https://schema.org/Code">
<meta itemprop="url" content="http://example.com/">
<meta itemprop="name" content="FreeMarker Manual">
<!--[if lte IE 9]>
<div style="background-color: #C00; color: #fff; padding: 12px 24px;">Please use a modern browser to view this website.</div>
<![endif]--><div class="header-top-bg"><div class="site-width header-top"><a class="logo" href="http://example.com" role="banner"> <img itemprop="image" src="logo.png" alt="My Logo">
</a></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">FreeMarker Manual</a><div class="navigation-header"></div></div><div class="site-width breadcrumb-row"><ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui.html"><span itemprop="name">Programmer&#39;s Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel.html"><span itemprop="name">The Data Model</span></a></li><li class="step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="pgui_datamodel_node.html"><span itemprop="name">Node variables</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="ref.html">Reference</a></li><li><a href="app_faq.html">FAQ</a></li><li><a href="preface.html#test_target">Bőregér</a></li><li><a href="api/index.html">API</a></li><li><a href="../index.html">Home</a></li></ul></div></div></div> <div class="main-content site-width">
<div class="content-wrapper">
<div id="table-of-contents-wrapper" class="col-left">
<script>var breadcrumb = ["FreeMarker Manual","Programmer\'s Guide","The Data Model","Node variables"];</script>
<script src="toc.js?1594338519184"></script>
<script src="docgen-resources/main.min.js?1594338519184"></script>
</div>
<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="pgui_datamodel_directive.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_objectWrapper.html"><span>Next</span></a></div><div class="title-wrapper">
<h1 class="content-header header-section1" id="pgui_datamodel_node" itemprop="headline">Node variables</h1>
</div></div><p>A node variable embodies a node in a tree structure. Node
variables were introduced to help <a href="xgui.html">the handling of
XML documents in the data-model</a>, but they can be used for the
modeling of other tree structures as well. For more information about
nodes from the point of view of the template language <a href="dgui_datamodel_types.html#dgui_datamodel_node">read this earlier section</a>.</p><p>A node variable has the following properties, provided by the
methods of <code class="inline-code">TemplateNodeModel</code> interface:</p><ul>
<li>
<p>Basic properties:</p>
<ul>
<li>
<p><code class="inline-code">TemplateSequenceModel
getChildNodes()</code>: A node has sequence of children
(except if the node is a leaf node, in which case the method
return an empty sequence or null). The child nodes should be
node variables as well.</p>
</li>
<li>
<p><code class="inline-code">TemplateNodeModel getParentNode()</code>: A
node has exactly 1 parent node, except if the node is root
node of the tree, in which case the method returns
<code class="inline-code">null</code>.</p>
</li>
</ul>
</li>
<li>
<p>Optional properties. If a property does not make sense in
the concrete use case, the corresponding method should return
<code class="inline-code">null</code>:</p>
<ul>
<li>
<p><code class="inline-code">String getNodeName()</code>: The node name
is the name of the macro, that handles the node when you use
<a href="ref_directive_visit.html#ref.directive.recurse"><code>recurse</code></a>
and <a href="ref_directive_visit.html#ref.directive.visit"><code>visit</code></a>
directives. Thus, if you want to use these directives with the
node, the node name is <em>required</em>.</p>
</li>
<li>
<p><code class="inline-code">String getNodeType()</code>: In the case of
XML: <code class="inline-code">&quot;element&quot;</code>, <code class="inline-code">&quot;text&quot;</code>,
<code class="inline-code">&quot;comment&quot;</code>, ...etc. This information, if
available, is used by the <code class="inline-code">recurse</code> and
<code class="inline-code">visit</code> directives to find the default
handler macro for a node. Also it can be useful for other
application specific purposes.</p>
</li>
<li>
<p><code class="inline-code">String getNamespaceURI()</code>: The node
namespace (has nothing to do with FTL namespaces used for
libraries) this node belongs to. For example, in the case of
XML, this is the URI of the XML namespace the element or
attribute belongs to. This information, if available, is used
by the <code class="inline-code">recurse</code> and <code class="inline-code">visit</code>
directives to find the FTL namespaces that store the handler
macros.</p>
</li>
</ul>
</li>
</ul><p>On the FTL side, the direct utilization of node properties is
done with <a href="ref_builtins_node.html">node built-ins</a>, and
with the <code class="inline-code">visit</code> and <code class="inline-code">recurse</code>
macros.</p><p>In most use cases, variables that implement
<code class="inline-code">TemplateNodeModel</code>, implement other interfaces as
well, since node variable properties just provide the basic
infrastructure for navigating between nodes. For a concrete example,
see <a href="xgui.html">how FreeMarker deals with XML</a>.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="pgui_datamodel_directive.html"><span>Previous</span></a><a class="paging-arrow next" href="pgui_datamodel_objectWrapper.html"><span>Next</span></a></div></div></div></div> </div>
</div>
<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"></div><div class="col-right"><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
Last generated:
<time itemprop="dateModified" datetime="2020-07-09T23:48:39Z" title="Thursday, July 9, 2020 11:48:39 PM GMT">2020-07-09 23:48:39 GMT</time> </p>
<p class="copyright">
© <span itemprop="copyrightYear">1999</span>–2020
<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="https://apache.org/">The Apache Software Foundation</a> </p>
</div></div></div></body>
</html>