web-dev-qa-db-fra.com

Erreur d'analyse XML - Contenu supplémentaire à la fin du document

J'essaie de donner la possibilité d'obtenir une réponse JSON ou XML.

JSON fonctionne bien mais quand je vois le XML, j'obtiens une erreur.

http://lmsapi.com/?api_key=fba9e59d7af86b239e82581780ff987e&format=jsonhttp://lmsapi.com/?api_key=fba9e59d7af86b239e82581780ff987e&format=xml

Je ne sais pas ce qui ne va pas. J'ai cherché et la seule chose que je vois est de m'assurer que je n'ai pas d'espace blanc supplémentaire ou même des espaces dans mes noms d'élément, ce que je n'ai pas.

index.php

<?php
require_once('includes/inc.settings.php');
if(${'Response'}['format'] == 'json'){
    print_r(${'Results'});  
}elseif(${'Response'}['format'] == 'xml'){
    header('Content-type: application/xml');
    echo "<?xml version=\"1.0\"?>";
    echo ${'Results'};
}
?>

inc.settings.php

<?php
// ****************************************
// Require other includes 
// ****************************************
    require('Excel/PHPExcel.php');
    require('inc.variables.php');
    require('inc.functions.php');
    require('inc.browser.php');
    require('class.phpmailer.php');

// ****************************************
// Initial page setup
// ****************************************

    // Set our Error Handling
    if($debug == true){
        error_reporting(E_ALL);
        ini_set('display_errors', 1);
    } else {
        error_reporting(E_ERROR);
        ini_set('display_errors', 1);
    }

    // Set our timeout limit
    set_time_limit(30);

    // Set our memory limit
    ini_set('memory_limit', '128M');

    // Start our PHP session
    session_start();

    // Set our charset to UTF-8
    mb_internal_encoding('UTF-8');

    // Get our browser information
    $browser = new Browser;

// ****************************************
// Connect to mySQL
// ****************************************
    mysql_connect(MYSQL_Host.':'.MYSQL_PORT, MYSQL_USER, MYSQL_PASS) or die('Could not establish a connection to the MySQL Engine.');
    mysql_select_db(MYSQL_DB) or die('Could not locate the specified database');


// ****************************************
// Sanitize our possible api data
// ****************************************

    if(isset($_GET['api_key'])) { ${'API KEY'} = inputCleanSQL($_GET['api_key']); } else { ${'API KEY'} = ''; } 
    if(isset($_GET['format'])){ ${'Format'} = inputCleanSQL($_GET['format']); } else { ${'Format'} = ''; }
    if(isset($_GET['act'])){ ${'Action'} = inputCleanSQL($_GET['act']); } else { ${'Action'} = ''; }
    if(isset($_GET['phone_numer'])){ ${'Phone Number'} = inputCleanSQL(removeCHARSphone($_GET['phone_number'])); } else { ${'Phone Number'} = ''; }
    if(isset($_GET['limit'])){ ${'Limit'} = inputCleanSQL($_GET['limit']); } else { ${'Limit'} = ''; }

// ****************************************
// Begin the Response Array
// ****************************************

    ${'Response'} = array();
    ${'Response'}['status'] = '';
    ${'Response'}['reason'] = array();
    ${'Format Type'} = true;

// Check the API Key
if(isset(${'API KEY'})){
    ${'API Key Check'} = mysql_result(mysql_query('SELECT count(0) FROM `api`.`api_keys` WHERE `api_key` = "'.${'API KEY'}.'"'),0);
    if(!${'API Key Check'}) {
        ${'Response'}['status'] = 'failed';
        ${'Response'}['reason'][] = 'invalid api key';
    } else {
        // Log the API hit
        mysql_query('INSERT INTO `api`.`api_log` (`api_key`) VALUES ("'.${'API KEY'}.'")');

        // Check the format request
        if(${'Format'} != '' && ${'Format'} != 'json' && ${'Format'} != 'xml'){
            ${'Response'}['status'] = 'failed';
            ${'Response'}['reason'][] = 'invalid format specified (&format=)';
            ${'Format Type'} = false;
        }

        // Check the action request
        if(${'Action'} != '' && ${'Action'} != 'get' && ${'Action'} != 'details'){
            ${'Response'}['status'] = 'failed';
            ${'Response'}['reason'][] = 'invalid action type (&act=)';
        }

        if(${'Response'}['status'] != 'failed'){
            ${'Response'}['status'] = 'success';
            unset(${'Response'}['reason']);
        }

    }
} else {
    ${'Response'}['status'] = 'failed';
    ${'Response'}['reason'][] = 'api key required';
}


if(isset(${'Format'}) && ${'Format Type'}){
    if(${'Format'} == 'json'){
        ${'Response'}['format'] = 'json';
        ${'Results'} = json_encode(${'Response'});
    } elseif(${'Format'} == 'xml'){
        ${'Response'}['format'] = 'xml';
        ${'Results'} = arrayToXML(${'Response'});
    }
} else {
    ${'Response'}['format'] = 'json';
    ${'Results'} = json_encode(${'Response'});
}
?>

Toute aide serait très appréciée!

13
JD Vangsness

XML ne peut avoir qu'une "entité de document" ou "racine", vous essayez d'en utiliser deux (status et format). Enveloppez vos deux éléments dans un seul, de sorte que votre document XML ne comporte qu'un seul élément racine.

Mauvais

<?xml version="1.0"?>
<status>success</status>
<format>xml</format>

Bon

<?xml version="1.0"?>
<response>
  <status>success</status>
  <format>xml</format>
</response>
52
salathe

Assurez-vous également de vérifier une déclaration de jeu d'url en double en haut de votre document. C'était mon problème. C'était une négligence très imprudente.

    <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9" 
url="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
1
zmonteca