fork download
  1. <?php
  2.  
  3. $xml = <<<'EOT'
  4. <?xml version="1.0"?>
  5. <stuff>
  6. <other_nodes>
  7. </other_nodes>
  8. <images>
  9. <image><sorted_number><![CDATA[1]]></sorted_number></image>
  10. <image><sorted_number><![CDATA[3]]></sorted_number></image>
  11. <image><sorted_number><![CDATA[2]]></sorted_number></image>
  12. </images>
  13. </stuff>
  14. EOT;
  15.  
  16. $dom = new DOMDocument();
  17. $dom->loadXML( $xml, LIBXML_NOBLANKS );
  18. $dom->formatOutput = True;
  19.  
  20. $images = $dom->getElementsByTagName( 'image' );
  21.  
  22. /* This is the same as your array conversion: */
  23. $sorted = iterator_to_array( $images );
  24.  
  25. /* This is your sorting routine adapted to DOMDocument: */
  26. usort( $sorted, function( $a, $b )
  27. {
  28. return
  29. $a->getElementsByTagName('sorted_number')->item(0)->nodeValue
  30. -
  31. $b->getElementsByTagName('sorted_number')->item(0)->nodeValue;
  32. });
  33.  
  34. /* This is the core loop to “replace” old nodes: */
  35. foreach( $sorted as $node ) $images->item(0)->parentNode->appendChild( $node );
  36.  
  37. echo $dom->saveXML();
  38.  
Success #stdin #stdout 0.03s 26292KB
stdin
Standard input is empty
stdout
<?xml version="1.0"?>
<stuff>
  <other_nodes>
    </other_nodes>
  <images>
    <image>
      <sorted_number><![CDATA[1]]></sorted_number>
    </image>
    <image>
      <sorted_number><![CDATA[2]]></sorted_number>
    </image>
    <image>
      <sorted_number><![CDATA[3]]></sorted_number>
    </image>
  </images>
</stuff>