You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/03/15 21:18:59 UTC
[02/51] [partial] incubator-freemarker-site git commit: 2.3.26-voting
docs, removed nightly
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/a4004324/builds/2.3.26-nightly/xgui_imperative_formal.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_imperative_formal.html b/builds/2.3.26-nightly/xgui_imperative_formal.html
deleted file mode 100644
index 324910a..0000000
--- a/builds/2.3.26-nightly/xgui_imperative_formal.html
+++ /dev/null
@@ -1,545 +0,0 @@
-<!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>Details - Apache 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="Apache FreeMarker Manual">
-<meta property="og:title" content="Details">
-<meta property="og:locale" content="en_US">
-<meta property="og:url" content="http://freemarker.org/docs/xgui_imperative_formal.html">
-<link rel="canonical" href="http://freemarker.org/docs/xgui_imperative_formal.html">
-<link rel="icon" href="favicon.png" type="image/png">
-<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
-<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
-<script>
-(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-ga('create', 'UA-55420501-1', 'auto');
-ga('send', 'pageview');
-</script>
-</head>
-<body itemscope itemtype="https://schema.org/Code">
- <meta itemprop="url" content="http://freemarker.org/docs/">
- <meta itemprop="name" content="Apache 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://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
-</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></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">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_imperative.html"><span itemprop="name">Imperative XML processing</span></a></li><li class="step
-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_imperative_formal.html"><span itemprop="name">Details</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</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 = ["Apache FreeMarker Manual","XML Processing Guide","Imperative XML processing","Details"];</script>
- <script src="toc.js?1489402528979"></script>
- <script src="docgen-resources/main.min.js?1489402528979"></script>
- </div>
-<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_imperative_learn.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_declarative.html"><span>Next</span></a></div><div class="title-wrapper">
-<h1 class="content-header header-section1" id="xgui_imperative_formal" itemprop="headline">Details</h1>
-</div></div><p>Every variable that corresponds to a single node in the DOM tree
- is a multi-type variable of type node and type hash (for programmers:
- implements both <code class="inline-code">TemplateNodeModel</code> and
- <code class="inline-code">TemplateHashModel</code>). Thus, you can use the <a href="ref_builtins_node.html">node built-ins</a> with them. Hash keys
- are interpreted as XPath expressions, except the special keys shown in
- the table below. Some of the node variables also have string type, so
- you can use them as string variables (for programmers: they implement
- <code class="inline-code">TemplateScalarModel</code>).</p><a name="misc.xguiTable"></a> <div class="table-responsive">
- <table class="table">
-
- <thead>
- <tr>
- <th>Node type (<code class="inline-code">?node_type</code>)</th>
-
-
- <th>Node name (<code class="inline-code">?node_name</code>)</th>
-
-
- <th>String value (e.g.�<code class="inline-code"><p>${node}</code>)</th>
-
-
- <th>Special hash keys</th>
-
- </tr>
-
- </thead>
-
-
- <tbody>
- <tr>
- <td><code class="inline-code">"document"</code></td>
-
-
- <td><code class="inline-code">"@document"</code></td>
-
-
- <td>No string value. (Error when you try to use it as
- string.)</td>
-
-
- <td><code class="inline-code"><em class="code-color">elementName</em></code>,
- <code class="inline-code">"<em class="code-color">prefix</em>:<em class="code-color">elementName</em>"</code>,
- <code class="inline-code">*</code>, <code class="inline-code">**</code>,
- <code class="inline-code">@@markup</code>, <code class="inline-code">@@nested_markup</code>,
- <code class="inline-code">@@text</code>, <code class="inline-code">@@local_name</code>,
- <code class="inline-code">@@qname</code>, <code class="inline-code">@@namespace</code></td>
-
- </tr>
-
-
- <tr>
- <td><code class="inline-code">"element"</code></td>
-
-
- <td><code class="inline-code">"<em class="code-color">name</em>"</code>: the
- name of the element. This is the local name (i.e. name without
- namespace prefix).</td>
-
-
- <td>If it has no element children, the text of all text node
- children concatenated together. Error otherwise, when you try to
- use it as string.</td>
-
-
- <td><code class="inline-code"><em class="code-color">elementName</em></code>,
- <code class="inline-code">"<em class="code-color">prefix</em>:<em class="code-color">elementName</em>"</code>,
- <code class="inline-code">*</code>, <code class="inline-code">**</code>,
- <code class="inline-code">@<em class="code-color">attrName</em></code>,
- <code class="inline-code">"@<em class="code-color">prefix</em>:<em class="code-color">attrName</em>"</code>,
- <code class="inline-code">@@</code>, <code class="inline-code">"@*"</code>,
- <code class="inline-code">@@start_tag</code>, <code class="inline-code">@@end_tag</code>,
- <code class="inline-code">@@attributes_markup</code>,
- <code class="inline-code">@@next_sibling_element</code>,
- <code class="inline-code">@@previous_sibling_element</code>,
- <code class="inline-code">@@markup</code>, <code class="inline-code">@@nested_markup</code>,
- <code class="inline-code">@@text</code>, <code class="inline-code">@@local_name</code>,
- <code class="inline-code">@@qname</code>, <code class="inline-code">@@namespace</code></td>
-
- </tr>
-
-
- <tr>
- <td><code class="inline-code">"text"</code></td>
-
-
- <td><code class="inline-code">"@text"</code></td>
-
-
- <td>The text itself.</td>
-
-
- <td><code class="inline-code">@@markup</code>,
- <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
- <code class="inline-code">@@local_name</code>, <code class="inline-code">@@qname</code>,
- <code class="inline-code">@@namespace</code></td>
-
- </tr>
-
-
- <tr>
- <td><code class="inline-code">"pi"</code></td>
-
-
- <td><code class="inline-code">"@pi$<em class="code-color">target</em>"</code></td>
-
-
- <td>The part between the target name and the
- <code class="inline-code">?></code>.</td>
-
-
- <td><code class="inline-code">@@markup</code>,
- <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
- <code class="inline-code">@@local_name</code>, <code class="inline-code">@@qname</code>,
- <code class="inline-code">@@namespace</code></td>
-
- </tr>
-
-
- <tr>
- <td><code class="inline-code">"comment"</code></td>
-
-
- <td><code class="inline-code">"@comment"</code></td>
-
-
- <td>The text of the comment, without the delimiters
- <code class="inline-code"><!--</code> and <code class="inline-code">--></code>.</td>
-
-
- <td><code class="inline-code">@@markup</code>,
- <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
- <code class="inline-code">@@local_name</code>, <code class="inline-code">@@qname</code>,
- <code class="inline-code">@@namespace</code></td>
-
- </tr>
-
-
- <tr>
- <td><code class="inline-code">"attribute"</code></td>
-
-
- <td><code class="inline-code">"<em class="code-color">name</em>"</code>: the
- name of the attribute. This is the local name (i.e. name without
- namespace prefix).</td>
-
-
- <td>The value of the attribute.</td>
-
-
- <td><code class="inline-code">@@markup</code>,
- <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
- <code class="inline-code">@@qname</code>, <code class="inline-code">@@local_name</code>,
- <code class="inline-code">@@qname</code>, <code class="inline-code">@@namespace</code></td>
-
- </tr>
-
-
- <tr>
- <td><code class="inline-code">"document_type"</code></td>
-
-
- <td><code class="inline-code">"@document_type$<em class="code-color">name</em>"</code>:
- <code class="inline-code"><em class="code-color">name</em></code> is the name
- of the document element.</td>
-
-
- <td>No string value. (Error when you try to use it as
- string.)</td>
-
-
- <td><code class="inline-code">@@markup</code>,
- <code class="inline-code">@@nested_markup</code>, <code class="inline-code">@@text</code>,
- <code class="inline-code">@@local_name</code>, <code class="inline-code">@@qname</code>,
- <code class="inline-code">@@namespace</code></td>
-
- </tr>
-
- </tbody>
-
- </table>
- </div>
-<p>Notes:</p><ul>
- <li>
- <p>There is no CDATA type. CDATA nodes are transparently
- considered as text nodes.</p>
- </li>
-
- <li>
- <p>These variables do <em>not</em> support
- <code class="inline-code">?keys</code> and <code class="inline-code">?values</code>.</p>
- </li>
-
- <li>
- <p>Element and attribute node names are local names, that is,
- they do not contain the namespace prefix. The URI of the namespace
- the node belongs to can be queried with the
- <code class="inline-code">?node_namespace</code> built-in.</p>
- </li>
-
- <li>
- <p>XPath expression needs Jaxen (recommended, but please use
- 1.1-beta-8 or later; <a href="http://jaxen.org/">download
- it here</a>) or Apache Xalan classes available, or an error
- will stop template execution. Note, however, that as some special
- hash keys hide the XPath expressions of the same meaning, those
- XPath expressions will work even if there is no XPath
- implementation available. <span class="marked-for-programmers">If both
- Xalan and Jaxen is available, FreeMarker will use Xalan, unless
- you choose Jaxen by calling
- <code class="inline-code">freemarker.ext.dom.NodeModel.useJaxenXPathSupport()</code>
- from Java.</span></p>
- </li>
-
- <li>
- <p>If Jaxen is used for the XPath support (not Xalan), then
- FreeMarker variables are visible with XPath variable references
- (e.g.
- <code class="inline-code">doc["book/chapter[title=$currentTitle]"]</code>).</p>
- </li>
- </ul><p>Meaning of special hash keys:</p><ul>
- <li>
- <p><code class="inline-code"><em class="code-color">elementName</em></code>,
- <code class="inline-code">"<em class="code-color">prefix</em>:<em class="code-color">elementName</em>"</code>:
- Returns the sequence of child nodes that are elements of name
- <code class="inline-code"><em class="code-color">elementName</em></code>. (Note
- that the term "child" means
- <em>immediate</em> descendant.) The selection is XML
- name-space aware, unless the XML document was persed with an XML
- parser that was not in namespace aware mode. In XML name-space
- aware mode, names without prefix
- (<em>elementName</em>) selects only elements
- that doesn't belong to any XML name-space (unless you have
- registered a default XML namespace), and names with prefix
- (<em>prefix</em>:<em>elementName</em>)
- selects only elements that are belonging to the XML namespace
- denoted by the prefix. The registration of prefixes and the
- setting of the default XML namespace is done with the
- <code class="inline-code">ns_prefixes</code> parameter of the <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
- directive</a>.</p>
- </li>
-
- <li>
- <p><code class="inline-code">*</code>: Returns the sequence of all child
- (direct descendant) <em>element</em> nodes. The
- sequence will contain the elements in the "document
- order", that is, in the order in which the first character
- of the XML representation of each node occurs (after expansion of
- general entities).</p>
- </li>
-
- <li>
- <p><code class="inline-code">**</code>: Returns the sequence of all
- descendant <em>element</em> nodes. The sequence will
- contain the elements in the document order.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@<em class="code-color">attName</em></code>,
- <code class="inline-code">"@<em class="code-color">prefix</em>:<em class="code-color">attrName</em>"</code>:
- Returns the attribute
- <code class="inline-code"><em class="code-color">attName</em></code> of the
- element as a sequence of size 1 that contains the attribute node,
- or as an empty sequence if the attribute does not exist (so to
- check if an attribute exists use
- <code class="inline-code">foo.@<em class="code-color">attName</em>[0]??</code>,
- <em>not</em>
- <code class="inline-code">foo.@<em class="code-color">attName</em>??</code>). As
- with special key
- <code class="inline-code">"<em class="code-color">elementName</em>"</code>, if
- the length of the sequence is 1, then it also acts as its first
- subvariable. If no
- <code class="inline-code"><em class="code-color">prefix</em></code> is used, then
- it returns only attribute that does not use XML namespace (even if
- you have set a default XML namespace). If a
- <code class="inline-code"><em class="code-color">prefix</em></code> is used, it
- returns only the attribute that belongs to the XML namespace
- associated with the
- <code class="inline-code"><em class="code-color">prefix</em></code>. The
- registration of prefixes is done with the
- <code class="inline-code">ns_prefixes</code> parameter of the <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
- directive</a>.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@</code> or <code class="inline-code">"@*"</code>: Returns
- the sequence of attribute nodes belonging to the parent element.
- This is the same as XPath <code class="inline-code">@*</code>.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@qname</code>: Returns the full-qualified name
- of the element (such as <code class="inline-code">e:book</code>, in contrast to
- the local name returned by <code class="inline-code">?node_name</code> that is
- <code class="inline-code">book</code>) . The prefix used (as
- <code class="inline-code">e</code>) is chosen based on the prefix registered in
- the current namespace with the <code class="inline-code">ns_prefixes</code>
- parameter of the <code class="inline-code">ftl</code> directive, and not
- influenced by the prefix used in the source XML document. If you
- have set a default XML namespace, then for nodes that use that,
- prefix <code class="inline-code">D</code> will be used. For nodes that does not
- belong to an XML namespace, no prefix is used (even if you have
- set a default namespace). If there is no prefix registered for the
- namespace of the node, the result is a non-existent variable
- (<code class="inline-code">node.@@qname??</code> is
- <code class="inline-code">false</code>).</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@local_mame</code>: The name of the node
- without the namespace prefix.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@namespace</code>: The namespace URL (not the
- namespace prefix) of the node.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@markup</code>: This returns the full XML
- markup of a node, as a string. (Full XML markup means that it also
- contains the markup of the child nodes, and the markup of the
- children of the child nodes, and so on.) The markup you get is not
- necessary the same as the markup in the source XML file, it's just
- semantically identical. Especially, note that CDATA sections will
- become to plain text. Also note that depending on how did you
- wrapped the original XML document with FreeMarker, comment or
- processing instruction nodes may were removed, and then they will
- be missing from the output of course. The first outputted start
- tag will contain
- <code class="inline-code">xmlns:<em class="code-color">prefix</em></code>
- attributes for each XML name-spaces used in the outputted XML
- fragment, and those prefixes will be used in the outputted element
- and attribute names. These prefixes will be the same as the
- prefixes registered with the <code class="inline-code">ns_prefixes</code>
- parameter of the <code class="inline-code">ftl</code> directive (no prefix will
- be used for <code class="inline-code">D</code>, as it will be registered as the
- default name-space with an <code class="inline-code">xmlns</code> attribute), or
- if no prefix was assigned for a XML name-space with that, then an
- arbitrary chosen unused prefix is used.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@nested_markup</code>: This is similar to
- <code class="inline-code">@@markup</code>, but it returns the XML markup of an
- element without its opening and closing tags. For the document
- node, it returns the same as <code class="inline-code">@@markup</code>. For
- other node types (text, processing instruction, etc.), it returns
- an empty string. Unlike with <code class="inline-code">@@markup</code>, no
- <code class="inline-code">xmlns:<em class="code-color">prefix</em></code>
- attributes will be placed into the output, but regarding the
- prefixes used in element and attribute names the rules are the
- same.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@text</code>: This returns the value of all
- text nodes that occur within the node (all descendant text nodes,
- not just direct children), concatenated together into a single
- string. If the node has no text node children, then the result is
- an empty string.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@start_tag</code>: Returns the markup of the
- <a href="gloss.html#gloss.startTag">start-tag</a> of the element
- node. As with <code class="inline-code">@@markup</code>, the output is not
- necessary the same as in the original XML document, but it is
- semantically equivalent with that. Regarding the XML name-spaces
- (<code class="inline-code">xmlns:<em class="code-color">prefix</em></code>
- attributes in the output, etc.) the rules are the same as with
- <code class="inline-code">"@@markup"</code></p>
- </li>
-
- <li>
- <p><code class="inline-code">@@end_tag</code>: Returns the markup of the
- <a href="gloss.html#gloss.endTag">end-tag</a> of the element node.
- As with <code class="inline-code">@@markup</code>, the output is not necessary
- the same as in the original XML document, but it is semantically
- equivalent with that.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@attributes_markup</code>: Returns the markup
- of the <a href="gloss.html#gloss.attribute">attributes</a> of the
- element node. As with <code class="inline-code">@@markup</code>, the output is
- not necessary the same as in the original XML document, but it is
- semantically equivalent with that.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@next_sibling_element</code> (since 2.3.26):
- The following sibling element of an element node or an empty node
- sequence if there's no such element. An element counts as a
- sibling of another element if they are on the same hierarchical
- level, and there's no other element or non-whitespace character
- data (text or CDATA) between the two elements. For example in
- <code class="inline-code"><a/><!-- comment
- -->#&x20;<b/></code> the two elements are
- siblings, but not in <code class="inline-code"><a/>text<b/></code>
- or <code class="inline-code"><a/><x/><b/></code>.</p>
- </li>
-
- <li>
- <p><code class="inline-code">@@previous_sibling_element</code> (since
- 2.3.26): The previous sibling element of an element node or an
- empty node sequence if there's no such element. See the last point
- for the meaning of sibling.</p>
- </li>
- </ul>
-
-
-
-
-<h2 class="content-header header-section2" id="autoid_151">Node sequences</h2>
-
-
- <p>Many of the special hash keys (indicated in the above list),
- and XPath expressions that result in node-sets (see the <a href="http://www.w3.org/TR/xpath">XPath recommendation</a>)
- return a sequence of nodes.</p>
-
- <p>These node sequences, if they store exactly 1 subvariable,
- will also act as the subvariable itself. For example,
- <code class="inline-code">${book.title[0]}</code> will do the same as
- <code class="inline-code">${book.title}</code>, if there is only one
- <code class="inline-code">title</code> element child of element
- <code class="inline-code">book</code>.</p>
-
- <p>Returning an empty node sequence is a normal situation. For
- example, if in a concrete XML document, element
- <code class="inline-code">book</code> has no child element
- <code class="inline-code">chapter</code>, then <code class="inline-code">book.chapter</code>
- results in an empty node sequence. Beware! This also means, that
- <code class="inline-code">book.chaptre</code> (note the typo) will also return
- empty node sequence, and will not stop with error. Also,
- <code class="inline-code">book.chaptre??</code> (note the typo) will return
- <code class="inline-code">true</code> because the empty sequence exists, so you
- have to use <code class="inline-code">book.chaptre[0]??</code> for the
- check.</p>
-
- <p>Node sequences that store not 1 nodes (but 0 or more than 1
- nodes) also support some of the hash keys described above. Namely,
- the following special keys are supported:</p>
-
- <ul>
- <li>
- <p><code class="inline-code"><em class="code-color">elementName</em></code>,
- <code class="inline-code">"<em class="code-color">prefix</em>:<em class="code-color">elementName</em>"</code></p>
- </li>
-
- <li>
- <p><code class="inline-code">@<em class="code-color">attrName</em></code>,
- <code class="inline-code">"@<em class="code-color">prefix</em>:<em class="code-color">attrName</em>"</code></p>
- </li>
-
- <li>
- <p><code class="inline-code">@@markup</code>,
- <code class="inline-code">@@nested_markup</code></p>
- </li>
-
- <li>
- <p><code class="inline-code">@@text</code></p>
- </li>
-
- <li>
- <p><code class="inline-code">*</code>, <code class="inline-code">**</code></p>
- </li>
-
- <li>
- <p><code class="inline-code">@@</code>, <code class="inline-code">"@*"</code></p>
- </li>
- </ul>
-
- <p>When you apply one of the above special keys on a node
- sequence that contains more than 1 or 0 nodes, then for each node in
- the sequence (where the special key does make sense, e.g. text nodes
- will be skipped for key <code class="inline-code">*</code> or
- <code class="inline-code">@foo</code>), the special key will be applied as it was
- explained for single nodes, and the results will be concatenated to
- form the final result. The results will be concatenated in the order
- as the corresponding nodes occur in the node sequence. The
- concatenation means string or sequence concatenation depending on
- the type of the results. If the special key would result in a string
- for a single node, then for multiple nodes the result is a single
- string too (the results for the single nodes concatenated), and if
- the special key would return a sequence for a single node, then for
- multiple nodes the result is a single sequence too. If there are 0
- nodes in the sequence you apply the special key on, the string
- result is an empty string or an empty sequence respectively.</p>
-
- <p>XPath expressions can be used with node sequences. However,
- for 0 or more than 1 nodes it will work only if you use Jaxen
- instead of Xalan, because of the limitations of the Xalan XPath
- implementation.</p>
- <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_imperative_learn.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_declarative.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 class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><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="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
-<p class="copyright">
-� <span itemprop="copyrightYear">1999</span>\u20132017
-<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
-</div></div></div></body>
-</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/a4004324/builds/2.3.26-nightly/xgui_imperative_learn.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_imperative_learn.html b/builds/2.3.26-nightly/xgui_imperative_learn.html
deleted file mode 100644
index 05c3205..0000000
--- a/builds/2.3.26-nightly/xgui_imperative_learn.html
+++ /dev/null
@@ -1,656 +0,0 @@
-<!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>Basics - Apache 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="Apache FreeMarker Manual">
-<meta property="og:title" content="Basics">
-<meta property="og:locale" content="en_US">
-<meta property="og:url" content="http://freemarker.org/docs/xgui_imperative_learn.html">
-<link rel="canonical" href="http://freemarker.org/docs/xgui_imperative_learn.html">
-<link rel="icon" href="favicon.png" type="image/png">
-<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
-<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
-<script>
-(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-ga('create', 'UA-55420501-1', 'auto');
-ga('send', 'pageview');
-</script>
-</head>
-<body itemscope itemtype="https://schema.org/Code">
- <meta itemprop="url" content="http://freemarker.org/docs/">
- <meta itemprop="name" content="Apache 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://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
-</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></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">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_imperative.html"><span itemprop="name">Imperative XML processing</span></a></li><li class="step
-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_imperative_learn.html"><span itemprop="name">Basics</span></a></li></ul><div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</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 = ["Apache FreeMarker Manual","XML Processing Guide","Imperative XML processing","Basics"];</script>
- <script src="toc.js?1489402528979"></script>
- <script src="docgen-resources/main.min.js?1489402528979"></script>
- </div>
-<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui_imperative.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_imperative_formal.html"><span>Next</span></a></div><div class="title-wrapper">
-<h1 class="content-header header-section1" id="xgui_imperative_learn" itemprop="headline">Basics</h1>
-</div></div><div class="page-menu">
-<div class="page-menu-title">Page Contents</div>
-<ul><li><a class="page-menu-link" href="#autoid_145" data-menu-target="autoid_145">Accessing elements by name</a></li><li><a class="page-menu-link" href="#autoid_146" data-menu-target="autoid_146">Accessing attributes</a></li><li><a class="page-menu-link" href="#autoid_147" data-menu-target="autoid_147">Exploring the tree</a></li><li><a class="page-menu-link" href="#autoid_148" data-menu-target="autoid_148">Using XPath expressions</a></li><li><a class="page-menu-link" href="#autoid_149" data-menu-target="autoid_149">XML namespaces</a></li><li><a class="page-menu-link" href="#autoid_150" data-menu-target="autoid_150">Don't forget escaping!</a></li></ul> </div> <div class="callout note">
- <strong class="callout-label">Note:</strong>
-
- <p>This section uses the DOM tree and the variable made in the
- <a href="xgui_expose.html">previous chapter</a>.</p>
- </div>
-<p>Assume that the programmer has put the XML document into the
- data-model as variable <code class="inline-code">doc</code>. This variable
- corresponds to the root of the <a href="xgui_expose_dom.html">DOM
- tree</a>, the "document". The actual variable
- structure behind <code class="inline-code">doc</code> is wily enough, and only
- roughly resembles the DOM tree. So instead of getting lost in the
- details, let's see how to use it by example.</p>
-
-
-
-
-<h2 class="content-header header-section2" id="autoid_145">Accessing elements by name</h2>
-
-
- <p>This FTL prints the title of the book:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><h1>${doc.book.title}</h1></pre></div>
-
- <p>The output will be:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output"><h1>Test Book</h1></pre></div>
-
- <p>As you see, both <code class="inline-code">doc</code> and
- <code class="inline-code">book</code> can be used as hashes; you get their child
- nodes as sub variables. Basically, you describe the path by which
- you reach the target (element <code class="inline-code">title</code>) in the DOM
- tree. You may notice that there was some swindle above: with
- <code class="inline-code">${doc.book.title}</code>, it seems that we instruct
- FreeMarker to print the <code class="inline-code">title</code> element itself, but
- we should print its child text node (check the <a href="xgui_expose_dom.html">DOM tree</a>). It still works, because
- elements are not only hash variables, but string variables as well.
- The scalar value of an element node is the string resulting from the
- concatenation of all its text child nodes. However, trying to use an
- element as scalar will cause error if the element has child
- elements. For example <code class="inline-code">${doc.book}</code> would stop with
- error.</p>
-
- <p>This FTL prints the titles of the two chapters:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><h2>${doc.book.chapter[0].title}</h2>
-<h2>${doc.book.chapter[1].title}</h2></pre></div>
-
- <p>Here, as <code class="inline-code">book</code> has 2
- <code class="inline-code">chapter</code> element children,
- <code class="inline-code">doc.book.chapter</code> is a sequence that stores the
- two element nodes. Thus, we can generalize the above FTL, so it
- works with any number of chapters:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.chapter as ch>
- <h2>${ch.title}</h2>
-</#list></pre></div>
-
- <p>But what's if there is only one chapter? Actually, when you
- access an element as hash subvariable, it is
- <em>always</em> a sequence as well (not only hash and
- string), but if the sequence contains exactly 1 item, then the
- variable also acts as that item itself. So, returning to the first
- example, this would print the book title as well:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><h1>${doc.book[0].title[0]}</h1></pre></div>
-
- <p>But you know that there is exactly 1 <code class="inline-code">book</code>
- element, and that a book has exactly 1 title, so you can omit the
- <code class="inline-code">[0]</code>-s.
- <code class="inline-code">${doc.book.chapter.title}</code> would work too, if the
- book happen to have only 1 <code class="inline-code">chapter</code>-s (otherwise
- it is ambiguous: how is it to know if the <code class="inline-code">title</code>
- of which <code class="inline-code">chapter</code> you want? So it stops with an
- error.). But since a book can have multiple chapters, you don't use
- this form. If the element <code class="inline-code">book</code> has no
- <code class="inline-code">chapter</code> child, then
- <code class="inline-code">doc.book.chapter</code> will be a 0 length sequence, so
- the FTL with <code class="inline-code"><#list ...></code> will still
- work.</p>
-
- <p>It is important to realize the consequence that, for example,
- if <code class="inline-code">book</code> has no <code class="inline-code">chapter</code>-s then
- <code class="inline-code">book.chapter</code> is an empty sequence, so
- <code class="inline-code">doc.book.chapter??</code> will <em>not</em>
- be <code class="inline-code">false</code>, it will be always
- <code class="inline-code">true</code>! Similarly,
- <code class="inline-code">doc.book.somethingTotallyNonsense??</code> will not be
- <code class="inline-code">false</code> either. To check if there was no children
- found, use <code class="inline-code">doc.book.chapter[0]??</code> (or
- <code class="inline-code">doc.book.chapter?size == 0</code>). Of course you can
- use similarly all the <a href="dgui_template_exp.html#dgui_template_exp_missing">missing value handler
- operators</a> (e.g.
- <code class="inline-code">doc.book.author[0]!"Anonymous"</code>), just don't
- forget that <code class="inline-code">[0]</code>.</p>
-
- <div class="callout note">
- <strong class="callout-label">Note:</strong>
-
- <p>The rule with sequences of size 1 is a convenience feature
- of the XML wrapper (implemented via multi-type FTL variables). It
- will not work with other sequences in general.</p>
- </div>
-
-
- <p>Now we finish the example by printing all the
- <code class="inline-code">para</code>-s of each chapter:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><h1>${doc.book.title}</h1>
-<#list doc.book.chapter as ch>
- <h2>${ch.title}</h2>
- <#list ch.para as p>
- <p>${p}
- </#list>
-</#list></pre></div>
-
- <p>this will print:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output"><h1>Test</h1>
- <h2>Ch1</h2>
- <p>p1.1
- <p>p1.2
- <p>p1.3
- <h2>Ch2</h2>
- <p>p2.1
- <p>p2.2</pre></div>
-
- <p>The above FTL could be written more nicely as:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#assign book = doc.book>
-<h1>${book.title}</h1>
-<#list book.chapter as ch>
- <h2>${ch.title}</h2>
- <#list ch.para as p>
- <p>${p}
- </#list>
-</#list></pre></div>
-
- <p>Finally, a generalized usage of the child selector mechanism:
- this template lists all <code class="inline-code">para</code>-s of the example XML
- document:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.chapter.para as p>
- <p>${p}
-</#list></pre></div>
-
- <p>The output will be:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output"> <p>p1.1
- <p>p1.2
- <p>p1.3
- <p>p2.1
- <p>p2.2
- </pre></div>
-
- <p>This example shows that hash sub variables select the children
- of a sequence of notes (just in the earlier examples that sequence
- happened to be of size 1). In this concrete case, subvariable
- <code class="inline-code">chapter</code> returns a sequence of size 2 (since there
- are two <code class="inline-code">chapter</code>-s), and then subvariable
- <code class="inline-code">para</code> selects the <code class="inline-code">para</code> child
- nodes of all nodes in that sequence.</p>
-
- <p>A negative consequence of this mechanism is that things like
- <code class="inline-code">doc.somethingNonsense.otherNonsesne.totalNonsense</code>
- will just evaluate to an empty sequence, and you don't get any error
- messages.</p>
-
-
-
-
-
-<h2 class="content-header header-section2" id="autoid_146">Accessing attributes</h2>
-
-
- <p>This XML is the same as the original, except that it uses
- attributes for the titles, instead of elements:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-unspecified"><!-- THIS XML IS USED FOR THE "Accessing attributes" CHAPTER ONLY! -->
-<!-- Outside this chapter examples use the XML from earlier. -->
-
-<book title="Test">
- <chapter title="Ch1">
- <para>p1.1</para>
- <para>p1.2</para>
- <para>p1.3</para>
- </chapter>
- <chapter title="Ch2">
- <para>p2.1</para>
- <para>p2.2</para>
- </chapter>
-</book></pre></div>
-
- <p>The attributes of an element can be accessed in the same way
- as the child elements of the element, except that you put an at-sign
- (@) before the name of the attribute:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#assign book = doc.book>
-<h1>${book.@title}</h1>
-<#list book.chapter as ch>
- <h2>${ch.@title}</h2>
- <#list ch.para as p>
- <p>${p}
- </#list>
-</#list></pre></div>
-
- <p>This will print exactly the same as the previous
- example.</p>
-
- <p>Getting attributes follows the same logic as getting child
- elements, so the result of <code class="inline-code">ch.@title</code> above is a
- sequence of size 1. If there were no <code class="inline-code">title</code>
- attribute, then the result would be a sequence of size 0. So be
- ware, using existence built-ins is tricky here too: if you are
- curious if <code class="inline-code">foo</code> has attribute
- <code class="inline-code">bar</code> then you have to write
- <code class="inline-code">foo.@bar[0]??</code>. (<code class="inline-code">foo.@bar??</code> is
- wrong, because it always returns <code class="inline-code">true</code>.)
- Similarly, if you want a default value for the
- <code class="inline-code">bar</code> attribute, then you have to write
- <code class="inline-code">foo.@bar[0]!"theDefaultValue"</code>.</p>
-
- <p>As with child elements, you can select the attributes of
- multiple nodes. For example, this template prints the titles of all
- chapters:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.chapter.@title as t>
- ${t}
-</#list></pre></div>
-
-
-
-
-
-<h2 class="content-header header-section2" id="autoid_147">Exploring the tree</h2>
-
-
- <p>This FTL will enumerate all child nodes of the book
- element:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book?children as c>
-- ${c?node_type} <#if c?node_type == 'element'>${c?node_name}</#if>
-</#list></pre></div>
-
- <p>this will print:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output">- text
-- element title
-- text
-- element chapter
-- text
-- element chapter
-- text</pre></div>
-
- <p>The meaning of <code class="inline-code">?node_type</code> is probably clear
- without explanation. There are several node types that can occur in
- a DOM tree, such as <code class="inline-code">"element"</code>,
- <code class="inline-code">"text"</code>, <code class="inline-code">"comment"</code>,
- <code class="inline-code">"pi"</code>, ...etc.</p>
-
- <p>The <code class="inline-code">?node_name</code> returns the name of element
- for element nodes. For other node types, it also returns something,
- but that's mainly useful for declarative XML processing, which will
- be discussed in a <a href="xgui_declarative.html">later
- chapter</a>.</p>
-
- <p>If the book element had attributes, they would
- <em>not</em> appear in the above list, for practical
- reasons. But you can get a list that contains all attributes of the
- element, with subvariable <code class="inline-code">@@</code> of the element
- variable. If you modify the first line of the XML to this:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-unspecified"><book foo="Foo" bar="Bar" baaz="Baaz"></pre></div>
-
- <p>and run this FTL:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.@@ as attr>
-- ${attr?node_name} = ${attr}
-</#list></pre></div>
-
- <p>then you get this output (or something similar):</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output">- baaz = Baaz
-- bar = Bar
-- foo = Foo</pre></div>
-
- <p>Returning to the listing of children, there is a convenience
- subvariable to list only the element children of an element:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#list doc.book.* as c>
-- ${c?node_name}
-</#list></pre></div>
-
- <p>This will print:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output">- title
-- chapter
-- chapter</pre></div>
-
- <p>You get the parent of an element with the
- <code class="inline-code">parent</code> built-in:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#assign e = doc.book.chapter[0].para[0]>
-<#-- Now e is the first para of the first chapter -->
-${e?node_name}
-${e?parent?node_name}
-${e?parent?parent?node_name}
-${e?parent?parent?parent?node_name}</pre></div>
-
- <p>This will print:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output">para
-chapter
-book
-@document</pre></div>
-
- <p>In the last line you have reached the root of the DOM tree,
- the document node. It's not an element, and this is why it has that
- strange name; don't deal with it now. Obviously, the document node
- has no parent.</p>
-
- <p>You can quickly go back to the document node using the
- <code class="inline-code">root</code> built-in:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#assign e = doc.book.chapter[0].para[0]>
-${e?root?node_name}
-${e?root.book.title}</pre></div>
-
- <p>This will print:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output">@document
-Test Book</pre></div>
-
- <p>For the complete list of built-ins you can use to navigate in
- the DOM tree, read the <a href="ref_builtins_node.html">reference
- of node built-ins</a>.</p>
-
-
-
-
-
-<h2 class="content-header header-section2" id="autoid_148">Using XPath expressions</h2>
-
-
- <div class="callout note">
- <strong class="callout-label">Note:</strong>
-
- <p>XPath expressions work only if <a href="http://jaxen.org/">Jaxen</a> (recommended, but use
- at least Jaxen 1.1-beta-8, not older) or <a href="http://xml.apache.org/xalan/">Apache Xalan</a>
- classes are available. (Apache Xalan classes are included in Sun
- J2SE 1.4, 1.5 and 1.6 (and maybe later too); no separate Xalan jar
- is needed.)</p>
- </div>
-
-
- <div class="callout note">
- <strong class="callout-label">Note:</strong>
-
- <p>Don't use the sample XML from the previous section, where
- <code class="inline-code">title</code> is an attribute; that applies only to
- that section.</p>
- </div>
-
-
- <p>If a hash key used with a node variable can't be interpreted
- otherwise (see the <a href="xgui_imperative_formal.html">next
- section</a> for the precise definition), then it will by
- interpreted as an XPath expression. For more information on XPath,
- please visit <a href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath</a>.</p>
-
- <p>For example, here we list the <code class="inline-code">para</code> elements
- of the chapter with <code class="inline-code">title</code> element (not
- attribute!) content "Ch1'':</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#list doc["book/chapter[title='Ch1']/para"] as p>
- <p>${p}
-</#list></pre></div>
-
- <p>It will print:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output"> <p>p1.1
- <p>p1.2
- <p>p1.3</pre></div>
-
- <p>The rule with sequences of length 1 (explained in earlier
- sections) stands for XPath results as well. That is, if the
- resulting sequence contains exactly 1 node, it also acts as the node
- itself. For example, print the first paragraph of chapter
- "Ch1":</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template">${doc["book/chapter[title='Ch1']/para[1]"]}</pre></div>
-
- <p>which prints the same as:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template">${doc["book/chapter[title='Ch1']/para[1]"][0]}</pre></div>
-
- <p>The context node of the XPath expression is the node (or
- sequence of nodes) whose hash subvariable is used to issue the XPath
- expression. Thus, this prints the same as the previous
- example:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template">${doc.book["chapter[title='Ch1']/para[1]"]}</pre></div>
-
- <p>Note that currently you can use a sequence of 0 or multiple
- (more than 1) nodes as context only if the programmer has set up
- FreeMarker to use Jaxen instead of Xalan.</p>
-
- <p>Also note that XPath indexes sequence items from 1, while FTL
- indexes sequence items from 0. Thus, to select the first chapter,
- the XPath expression is <code class="inline-code">"/book/chapter[1]"</code>, while
- the FTL expression is <code class="inline-code">book.chapter[0]</code>.</p>
-
- <p>If the programmer has set up FreeMarker to use Jaxen instead
- of Xalan, then FreeMarker variables are visible with XPath variable
- references:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#assign <strong>currentTitle</strong> = "Ch1">
-<#list doc["book/chapter[title=<strong>$currentTitle</strong>]/para"] as p>
-<em>...</em></pre></div>
-
- <p>Note that <code class="inline-code">$currentTitle</code> is not a FreeMarker
- interpolation, as there are no <code class="inline-code">{</code> and
- <code class="inline-code">}</code> there. That's an XPath expression.</p>
-
- <p>The result of some XPath expressions is not a node-set, but a
- string, a number, or a boolean. For those XPath expressions, the
- result is an FTL string, number, or boolean variable respectively.
- For example, the following will count the total number of
- <code class="inline-code">para</code> elements in the XML document, so the result
- is a number:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template">${x["count(//para)"]}</pre></div>
-
- <p>The output will be:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output">5</pre></div>
-
-
-
-
-
-<h2 class="content-header header-section2" id="autoid_149">XML namespaces</h2>
-
-
-
-
- <p>Be default, when you write something like
- <code class="inline-code">doc.book</code>, then it will select the element with
- name <code class="inline-code">book</code> that does not belongs to any XML
- namespace (similarly to XPath). If you want to select an element
- that is inside an XML namespace, you must register a prefix and use
- that. For example, if element <code class="inline-code">book</code> is in XML
- namespace <code class="inline-code">http://example.com/ebook</code>, then you have
- to associate a prefix with it at the top of the template with the
- <code class="inline-code">ns_prefixes</code> parameter of the <a href="ref_directive_ftl.html#ref.directive.ftl"><code>ftl</code>
- directive</a>:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#ftl ns_prefixes={"e":"http://example.com/ebook"}></pre></div>
-
- <p>And now you can write expressions as
- <code class="inline-code">doc["e:book"]</code>. (The usage of square bracket
- syntax was required because the colon would confuse FreeMarker
- otherwise.)</p>
-
- <p>As the value of <code class="inline-code">ns_prefixes</code> is a hash, you
- can register multiple prefixes:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#ftl ns_prefixes={
- "e":"http://example.com/ebook",
- "f":"http://example.com/form",
- "vg":"http://example.com/vectorGraphics"}
-></pre></div>
-
- <p>The <code class="inline-code">ns_prefixes</code> parameter affects the whole
- <a href="dgui_misc_namespace.html">FTL namespace</a>. This means
- in practice that the prefixes you have registered in the main page
- template will be visible in all <code class="inline-code"><#include
- ...></code>-d templates, but not in <code class="inline-code"><#imported
- ...></code>-d templates (often referred as FTL libraries). Or
- from another point of view, an FTL library can register XML
- namespace prefixes for it's own use, without interfering with the
- prefix registrations of the main template and other
- libraries.</p>
-
- <p>Note that, if an input document is dominated by a given XML
- namespace, you can set that as the default namespace for
- convenience. This means that if you don't use prefix, as in
- <code class="inline-code">doc.book</code>, then it selects element that belongs to
- the default namespace. The setting of the default namespace happens
- with reserved prefix <code class="inline-code">D</code>, for example:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-template"><#ftl ns_prefixes={"D":"http://example.com/ebook"}></pre></div>
-
- <p>Now expression <code class="inline-code">doc.book</code> select the
- <code class="inline-code">book</code> element that belongs to XML namespace
- <code class="inline-code">http://example.com/ebook</code>. Unfortunately, XPath
- does not support this idea of a default namespace. Thus, in XPath
- expressions, element names without prefixes always select the
- elements that does not belong to any XML namespace. However, to
- access elements in the default namespace you can directly use prefix
- <code class="inline-code">D</code>, for example:
- <code class="inline-code">doc["D:book/D:chapter[title='Ch1']"]</code>.</p>
-
- <p>Note that when you use a default namespace, then you can
- select elements that does not belong to any node namespace with
- reserved prefix <code class="inline-code">N</code>, for example
- <code class="inline-code">doc.book["N:foo"]</code>. It doesn't go for XPath
- expressions, where the above can be witten as
- <code class="inline-code">doc["D:book/foo"]</code>.</p>
-
-
-
-
-
-<h2 class="content-header header-section2" id="autoid_150">Don't forget escaping!</h2>
-
-
- <p>As we generate output of HTML format in these examples, and
- HTML format reserves characters as <code class="inline-code"><</code>,
- <code class="inline-code">&</code>, etc., we have to ensure that those will be
- escaped. For that, either FreeMarker has to be <a href="pgui_config_outputformatsautoesc.html">properly
- configured</a>, or add <code class="inline-code">output_format="HTML"</code> in
- the template to the <code class="inline-code">ftl</code> directive calls.</p>
-
- <p>So if the book title is "Romeo & Juliet", the resulting
- HTML output will be correctly:</p>
-
-
-
-<div class="code-wrapper"><pre class="code-block code-output"><em>...</em>
-<h1>Romeo &amp; Juliet</h1>
-<em>...</em></pre></div>
- <div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui_imperative.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_imperative_formal.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 class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><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="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
-<p class="copyright">
-� <span itemprop="copyrightYear">1999</span>\u20132017
-<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
-</div></div></div></body>
-</html>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker-site/blob/a4004324/builds/2.3.26-nightly/xgui_preface.html
----------------------------------------------------------------------
diff --git a/builds/2.3.26-nightly/xgui_preface.html b/builds/2.3.26-nightly/xgui_preface.html
deleted file mode 100644
index 8e1ad39..0000000
--- a/builds/2.3.26-nightly/xgui_preface.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!doctype html>
-<!-- Generated by FreeMarker/Docgen from DocBook -->
-<html lang="en" class="page-type-preface">
-<head prefix="og: http://ogp.me/ns#">
-<meta charset="utf-8">
-<title>Preface - Apache 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="Apache FreeMarker Manual">
-<meta property="og:title" content="Preface">
-<meta property="og:locale" content="en_US">
-<meta property="og:url" content="http://freemarker.org/docs/xgui_preface.html">
-<link rel="canonical" href="http://freemarker.org/docs/xgui_preface.html">
-<link rel="icon" href="favicon.png" type="image/png">
-<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
-<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1489402528979">
-<script>
-(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-ga('create', 'UA-55420501-1', 'auto');
-ga('send', 'pageview');
-</script>
-</head>
-<body itemscope itemtype="https://schema.org/Code">
- <meta itemprop="url" content="http://freemarker.org/docs/">
- <meta itemprop="name" content="Apache 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://freemarker.org" role="banner"> <img itemprop="image" src="logo.png" alt="FreeMarker">
-</a><ul class="tabs"><li><a href="http://freemarker.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="http://freemarker.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/browse/FREEMARKER/" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="http://freemarker.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="searc
h-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></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">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui.html"><span itemprop="name">XML Processing Guide</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="xgui_preface.html"><span itemprop="name">Preface</span></a></li></ul><div class="bookmarks" title="B
ookmarks"><span class="sr-only">Bookmarks:</span><ul class="bookmark-list"><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</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 = ["Apache FreeMarker Manual","XML Processing Guide","Preface"];</script>
- <script src="toc.js?1489402528979"></script>
- <script src="docgen-resources/main.min.js?1489402528979"></script>
- </div>
-<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="xgui.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_expose.html"><span>Next</span></a></div><div class="title-wrapper">
-<h1 class="content-header header-chapter" id="xgui_preface" itemprop="headline">Preface</h1>
-</div></div><p>Although FreeMarker was originally designed as a web page template
- engine, as of version 2.3 it also targets another application domain:
- transforming XML into arbitrary textual output (e.g. HTML files). Thus,
- in many cases, FreeMarker is an XSLT alternative.</p><p>Technically, there is nothing special in transforming XML
- documents. It's just like when you do anything else with FreeMarker: you
- drop the XML document into the data-model (and possibly other
- variables), and then you merge the data-model with the FTL template(s)
- that generate the output text. The extra features introduced for better
- XML processing are the node FTL variable type (symbolizes a node in
- generic tree structures, usable not only for XML) and the built-ins and
- directives dealing with them, and the XML wrapper you get out-of-the-box
- that exposes XML documents as FTL variables for the templates.</p><p>What's the difference between using FreeMarker or XSLT? The FTL
- language has the usual imperative/procedural logic. On the other hand,
- XSLT is a language with declarative style, designed by "too clever"
- people, so it's not easy to adopt its logic, nor to use it in many
- cases. Also its syntax is terribly verbose. However, XSLT's
- "apply-templates" method can be very handy when you process XML
- documents, thus FreeMarker supports something similar called the
- "visitor pattern". So in many applications, it is much
- easier to write FTL stylesheets than XSLT style-sheets. Another
- fundamental difference is that FTL "transforms" the node tree to text,
- while XSLT transforms the tree to another tree. So you cannot always use
- FreeMarker where you can use XSLT.</p><div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="xgui.html"><span>Previous</span></a><a class="paging-arrow next" href="xgui_expose.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 class="column"><h3 class="column-header">Overview</h3><ul><li><a href="http://freemarker.org/">What is FreeMarker?</a></li><li><a href="http://freemarker.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="http://freemarker.org/history.html">About us</a></li><li><a itemprop="license" href="app_license.html">License</a></li></ul></div><div class="column"><h3 class="column-header">Handy stuff</h3><ul><li><a href="http://freemarker-online.kenshoo.com/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href
="https://github.com/freemarker/freemarker">FreeMarker on Github</a></li><li><a href="https://twitter.com/freemarker">Follow us on Twitter</a></li><li><a href="https://issues.apache.org/jira/browse/FREEMARKER/">Report a bug</a></li><li><a href="http://stackoverflow.com/questions/ask?tags=freemarker">Ask a question</a></li><li><a href="http://freemarker.org/mailing-lists.html">Mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/freemarker/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="http://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><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="2017-03-13T10:55:28Z" title="Monday, March 13, 2017 10:55:28 AM GMT">2017-03-13 10:55:28 GMT</time>, for Freemarker 2.3.26 </p>
-<p class="copyright">
-� <span itemprop="copyrightYear">1999</span>\u20132017
-<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="http://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. </p>
-</div></div></div></body>
-</html>