Отвечу сам, может пригодится кому. Итоговое решение получилось примерно таким:
function build_tree( $input_array, $output = '' )
{
if( !is_array( $input_array ) )
{
return '';
}
if( array_key_exists( 'group', $input_array ) )
{
$output .= '<ul>';
}
foreach( $input_array as $key => $value )
{
if( ( isset( $value[ '@attributes' ][ 'txtid' ] ) ) && ( $key !== 'parameter' ) )
{
$id = $value[ '@attributes' ][ 'id' ];
$title = $value[ '@attributes' ][ 'txtid' ];
$output .= '<li>' . $title;
if( array_key_exists( 'group', $value ) )
{
$output .= build_tree( $value );
}
$output .= '</li>';
}
elseif( $key !== 'parameter' )
{
$output .= build_tree( $value );
}
}
if( array_key_exists( 'group', $input_array ) )
{
$output .= '</ul>';
}
return $output;
}