with the below code you should be able to manipulate the output to your requirements..
/* utility class to simplify working with DOMDocument & XML */
class xmldom{
    private $xml;
    private $parse_errs;
    public function __construct( $data, $options=array() ){
        try{
            $opts=(object)array_merge(array(
                'encoding'      =>  'utf-8',
                'validate'      =>  false,
                'standalone'    =>  true,
                'preserve'      =>  true,
                'strict'        =>  false,
                'substitute'    =>  false,
                'recover'       =>  true,
                'format'        =>  false
            ),$options);
            libxml_use_internal_errors( TRUE );
            $this->xml = new DOMDocument('1.0',$opts->encoding);
            $this->xml->validateOnParse=$opts->validate;
            $this->xml->standalone=$opts->standalone;
            $this->xml->preserveWhiteSpace=$opts->preserve;
            $this->xml->strictErrorChecking=$opts->strict;
            $this->xml->substituteEntities=$opts->substitute;
            $this->xml->recover=$opts->recover;
            $this->xml->formatOutput=$opts->format;
            $this->xml->loadXML( mb_convert_encoding( $data, $opts->encoding ) );
            $this->parse_errs=serialize( libxml_get_last_error() );
            libxml_clear_errors();
        }catch( Exception $e ){
            die( $e->getMessage() );    
        }
    }
    public function getdom(){
        return $this->xml;
    }
    public function geterrors(){
        return $this->parse_errs;   
    }
}
/* Utility class to iterate nodes in the DOM */
class RecursiveDOMIterator implements RecursiveIterator {
    private $index;
    private $list;
    public function __construct(DOMNode $domNode){
        $this->index = 0;
        $this->list = $domNode->childNodes;
    }
    public function current(){
        return $this->list->item($this->index);
    }
    public function getChildren(){
        return new self( $this->current() );
    }
    public function hasChildren(){
        return $this->current()->hasChildNodes();
    }
    public function key(){
        return $this->index;
    }
    public function next(){
        $this->index++;
    }
    public function rewind(){
        $this->index = 0;
    }
    public function valid(){
        return $this->index < $this->list->length;
    }
}
/* Get the xml data */
$url=file_get_contents( 'http://www.newyorkfed.org/xml/data/fx/ATSNoon.xml' );
/* Construct DOMDocument object using xml data as source */
$dom=new xmldom(  $url );
$xml=$dom->getdom();
/* Find the Root node in the DOMDocument */
$rootnode=$xml->getElementsByTagName('UtilityData')->item(0);
/* Create the Domnode iterator object */
$nodeItr=new RecursiveDOMIterator( $rootnode );
/* Create standard recursive Iterator */
$itr=new RecursiveIteratorIterator( $nodeItr, RecursiveIteratorIterator::SELF_FIRST );
/* Iterate through the DOM and echo out tagname & value */
foreach( $itr as $node ) {
    if( $node->nodeType === XML_ELEMENT_NODE ) {
        /*
            Here you can add to an array or manipulate however you see fit.
        */
        echo $node->nodeName . ' ' . $node->nodeValue. '<br />';
    }
}
/* clean up */
$dom=$rootnode=$itr=$nodeItr=null;