This object mimicks an array and is used to contain a list of nodes, either as a result from a search, e.g. from getElementsByTagName() or directly created using ar_xml::nodes() or the childNodes property of an element.

An ar_xmlNodes object can be iterated over, and accessed and counted, just like any normal array. However some PHP methods require a real array as input. In that case you must manually cast the object to an array first. e.g:

$list = array_merge( $list, (array) $ul->li );

The ar_xmlNodes object implements all the methods of ar_xmlElement. (Note: The method getElementById() was missing in Ariadne upto and including 2.7.3. )

It has the following properties:

(array) attributes (Readonly.) A list of attributes to set on each child node. Will be re-applied whenever the ar_xmlNodes object is cast to string. Do not change directly, use setAttribute() instead.
(object) childNodes Readonly. A reference to itself.
(bool) isDocumentFragment Whether or not this object is used as a document fragment. False when the list is a result of a search or it has a parentNode.
(object) firstChild Readonly. A reference to the first child node, if available.
(object) lastChild Readonly. A reference to the last child node, if available.
(mixed) nodeValue An array of nodeValues of its childNodes, or if there is only one childNode, the nodeValue of that childNode.
(object) parentNode (Readonly.) A reference to the parent node, if available. Do not change directly, use the proper method, e.g. appendChild(), insertBefore(), etc. Or you can assign a list to the childNodes property of an element.

In addition you can access child nodes by their tag names, e.g.:

$list = ar_xml::nodes(
$x->el('a', 'an a'),
$x->el('a', 'another a'),
$x->el('b', 'a b'),
$x->el('a', 'last a')
$list->a->setAttribute('class', 'a');
$list->a[1]->setAttribute('class', 'a2');
echo $list;

Results in:

<a class="a">an a</a>
<a class="a2">another a</a>
<b>a b</b>
<a class="a">last a</a>