Returns true if the supplied node has one or more child nodes (of any kind).
fn:has-children
( xs:boolean
fn:has-children
( $node
as node()?
xs:boolean
If the argument is omitted, it defaults to the context item (.
). The
behavior of the function if the argument is omitted is exactly the same as if the
context item had been passed as the argument.
Provided that the supplied argument $node
matches the expected type
node()?
, the result of the function call
fn:has-children($node)
is defined to be the same as the result of the
expression fn:exists($node/child::node())
.
The following errors may be raised when $node
is omitted:
If the context item is absent, dynamic error
If the context item is not a node, type error .
If $node
is an empty sequence the result is false.
The motivation for this function is to support streamed evaluation. According to the streaming rules in , the following construct is not streamable:
This is because it makes two downward selections to read the child row
elements. The use of fn:has-children
in the xsl:if
conditional
is intended to circumvent this restriction.
Although the function was introduced to support streaming use cases, it has general utility as a convenience function.