<document>
  <header>
    <product>resin</product>
    <title>XPath Functions</title>
  </header>

  <body>
    <localtoc/>

<s1 name="node-set" title="Node Set Functions">

<s2 name="last" title="last()" type="defun">
<p>Returns the number of nodes matching the axis.</p>

<deftable>
<tr><td>chapter/verse[last()]</td>
    <td>The last verse in each chapter.</td>

</tr><tr><td>ancestor::node()[last()]</td>
    <td>The furthest ancestor from the current node.</td>
</tr></deftable>
</s2>

<s2 name="count" title="count(node-set)" type="defun">
<p>Returns the number of nodes matching the <var>node-set</var> pattern.</p>
</s2>

<s2 name="local-part" title="local-part(node)" type="defun">
<p>Returns the local part of the node's name.
In other words, the node name stripped of the namespace prefix.</p>
</s2>

<s2 name="namespace" title="namespace(node)" type="defun">
<p>Returns the namespace URL the node's name.</p>
</s2>

<s2 name="name" title="name(node)" type="defun">
<p>Returns the node's name.</p>
</s2>

<s2 name="id" title="id(idref)" type="defun">
<p>Returns the node with the 'ID' attribute equals to idref.
The ID attribute is assigned in the DTD.  The actual attribute name
may, of course, vary.</p>
</s2>

</s1>

<s1 name="string-fun" title="String Functions">

<s2 name="string" title="string(obj)" type="defun">
<p>Converts the object to a string.</p>
</s2>

<s2 name="concat" title="concat(s1, s2, ...)" type="defun">
<p>Concatenates strings.</p>
</s2>

<s2 name="starts-with" title="starts-with(string, head)" type="defun">
<p>True if <var>string</var> starts with <var>head</var>.</p>
</s2>

<s2 name="contains" title="contains(string, substring)" type="defun">
<p>True if <var>string</var> contains <var>substring</var>.</p>
</s2>

<s2 name="substring-before" title="substring-before(string, substring)" type="defun">
<p>Returns the substring of <var>string</var> before matching
<var>substring</var>.</p>
</s2>

<s2 name="substring-after" title="substring-after(string, substring)" type="defun">
<p>Returns the substring of <var>string</var> after the matching
<var>substring</var>.</p>
</s2>

<s2 name="string-length" title="string-length(string)" type="defun">
<p>Returns the string length of <var>string</var>.</p>
</s2>

<s2 name="normalize-space" title="normalize-space(string)" type="defun">
<p>Normalizes whitespace.  Consecutive whitespace is converted
into a single space.  Leading and trailing whitespace is trimmed.</p>
</s2>

<s2 name="translate" title="translate(string, from, to)" type="defun">
<p>Converts characters in a string, like the 'tr' command.</p>
</s2>
</s1>

<s1 name="boolean-fun" title="Boolean Functions">
<s2 name="boolean" title="boolean(obj)" type="defun">
<p>Converts <var>obj</var> into a boolean.</p>
</s2>

<s2 name="true" title="true()" type="defun">
<p>Returns true.</p>
</s2>

<s2 name="false" title="false()" type="defun">
<p>Returns false.</p>
</s2>

<s2 name="lang" title="lang(language)" type="defun">
<p>Returns true if the context node has an xml:lang of <var>language</var>.</p>
</s2>

</s1>

<s1 name="number" title="Number Functions">

<s2 name="number" title="number(obj)" type="defun">
<p>Converts <var>obj</var> to a number (Java double).</p>
</s2>

<s2 name="sum" title="sum(node-set)" type="defun">
<p>Converts the node values of <var>node-set</var> to numbers and adds
them.</p>
</s2>

<s2 name="floor" title="floor(number)" type="defun">
<p>Returns the closest integer below <var>number</var>.</p>
</s2>

<s2 name="ceil" title="ceiling(number)" type="defun">
<p>Returns the closest integer above <var>number</var>.</p>
</s2>

<s2 name="round" title="round(number)" type="defun">
<p>Rounds <var>number</var> to the nearest integer.</p>
</s2>

</s1>

<s1 name="extension" title="Resin Extensions">

<s2 name="if" title="if(test,a,b)" type="defun">
<p>Conditionally selects the value of <var>a</var> or <var>b</var>.
If <var>test</var> evaluates to true, return the value of <var>a</var>.
Otherwise, return the value of <var>b</var>.</p>
</s2>
</s1>
  </body>
</document>