<?php
$xml = <<<'EOT'
<?xml version="1.0"?>
<stuff>
<other_nodes>
</other_nodes>
<images>
<image><sorted_number><![CDATA[1]]></sorted_number></image>
<image><sorted_number><![CDATA[3]]></sorted_number></image>
<image><sorted_number><![CDATA[2]]></sorted_number></image>
</images>
</stuff>
EOT;
$dom = new DOMDocument();
$dom->loadXML( $xml, LIBXML_NOBLANKS );
$dom->formatOutput = True;
$images = $dom->getElementsByTagName( 'image' );
/* This is the same as your array conversion: */
$sorted = iterator_to_array( $images );
/* This is your sorting routine adapted to DOMDocument: */
usort( $sorted, function( $a, $b )
{
return
$a->getElementsByTagName('sorted_number')->item(0)->nodeValue
-
$b->getElementsByTagName('sorted_number')->item(0)->nodeValue;
});
/* This is the core loop to “replace” old nodes: */
foreach( $sorted as $node ) $images->item(0)->parentNode->appendChild( $node );
echo $dom->saveXML();
PD9waHAKCiR4bWwgPSA8PDwnRU9UJwo8P3htbCB2ZXJzaW9uPSIxLjAiPz4KPHN0dWZmPgogICAgPG90aGVyX25vZGVzPgogICAgPC9vdGhlcl9ub2Rlcz4KICAgIDxpbWFnZXM+CiAgICAgICAgPGltYWdlPjxzb3J0ZWRfbnVtYmVyPjwhW0NEQVRBWzFdXT48L3NvcnRlZF9udW1iZXI+PC9pbWFnZT4KICAgICAgICA8aW1hZ2U+PHNvcnRlZF9udW1iZXI+PCFbQ0RBVEFbM11dPjwvc29ydGVkX251bWJlcj48L2ltYWdlPgogICAgICAgIDxpbWFnZT48c29ydGVkX251bWJlcj48IVtDREFUQVsyXV0+PC9zb3J0ZWRfbnVtYmVyPjwvaW1hZ2U+CiAgICA8L2ltYWdlcz4KPC9zdHVmZj4KRU9UOwoKJGRvbSA9IG5ldyBET01Eb2N1bWVudCgpOwokZG9tLT5sb2FkWE1MKCAkeG1sLCBMSUJYTUxfTk9CTEFOS1MgKTsKJGRvbS0+Zm9ybWF0T3V0cHV0ID0gVHJ1ZTsKCiRpbWFnZXMgPSAkZG9tLT5nZXRFbGVtZW50c0J5VGFnTmFtZSggJ2ltYWdlJyApOwoKLyogVGhpcyBpcyB0aGUgc2FtZSBhcyB5b3VyIGFycmF5IGNvbnZlcnNpb246ICovCiRzb3J0ZWQgPSBpdGVyYXRvcl90b19hcnJheSggJGltYWdlcyApOwoKLyogVGhpcyBpcyB5b3VyIHNvcnRpbmcgcm91dGluZSBhZGFwdGVkIHRvIERPTURvY3VtZW50OiAqLwp1c29ydCggJHNvcnRlZCwgZnVuY3Rpb24oICRhLCAkYiApCnsKICAgIHJldHVybgogICAgJGEtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzb3J0ZWRfbnVtYmVyJyktPml0ZW0oMCktPm5vZGVWYWx1ZQogICAgLQogICAgJGItPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzb3J0ZWRfbnVtYmVyJyktPml0ZW0oMCktPm5vZGVWYWx1ZTsKfSk7CgovKiBUaGlzIGlzIHRoZSBjb3JlIGxvb3AgdG8g4oCccmVwbGFjZeKAnSBvbGQgbm9kZXM6ICovCmZvcmVhY2goICRzb3J0ZWQgYXMgJG5vZGUgKSAkaW1hZ2VzLT5pdGVtKDApLT5wYXJlbnROb2RlLT5hcHBlbmRDaGlsZCggJG5vZGUgKTsKCmVjaG8gJGRvbS0+c2F2ZVhNTCgpOwo=