web-dev-qa-db-fra.com

Erreur à la ligne 2 de la colonne 1: contenu supplémentaire à la fin du document

Lorsque j'utilise le code ci-dessous et que j'analyse le xml localement, cela fonctionne bien, mais lors du téléchargement du même script sur le serveur, il affiche une erreur.

Remarque: j'ai récupéré le $lng et $lat à partir de la chaîne de requête et cela fonctionne bien localement.

$lng=$_GET['lng'];
$lat=$_GET['lat'];
$conn=new LoginSystem();
$conn->connect();
$dom = new DOMDocument("1.0");

$query="select catch_id,catch_details,image from mycatch where longitude='$lng' AND latitude='$lat'";
$result = mysql_query($query);

if (!$result) {
  die("Invalid query: " . mysql_error());
}

header("Content-type: text/xml");

// Iterate through the rows, adding XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->createElement("mycatch");
  $node = $dom->appendChild($node);
foreach ($row as $fieldname => $fieldvalue) {
      $child = $dom->createElement($fieldname);
    $child = $node->appendChild($child);
    $value = $dom->createTextNode($fieldvalue);
    $value = $child->appendChild($value);
  }
}

$conn->disconnect();
$xml_string = $dom->saveXML();
echo $xml_string;

Sur le serveur, il renvoie cette erreur. Et le document est également vide .....

Cette page contient les erreurs suivantes:
erreur sur la ligne 2 de la colonne 1: Contenu supplémentaire à la fin du document Ci-dessous, un rendu de la page jusqu'à la première erreur.

23
hunter

Je pense que vous créez un document qui ressemble à ceci:

<mycatch>
    ....
</mycatch>
<mycatch>
    ....
</mycatch>

Ce n'est pas un document XML valide car il a plus d'un élément racine. Vous devez avoir un seul élément de niveau supérieur, comme dans

<mydocument>      
  <mycatch>
      ....
  </mycatch>
  <mycatch>
      ....
  </mycatch>
  ....
</mydocument>
42
Jim Garrison

Le problème est la chaîne de connexion à la base de données, l'un de vos paramètres de fonction de connexion à la base de données MySQL n'est pas correct, il y a donc un message d'erreur dans la sortie du navigateur, faites un clic droit sur la page Web de sortie et affichez le code source html, vous verrez une ligne d'erreur suivie d'une sortie XML correcte fichier de données). J'ai eu le même problème et la solution ci-dessus a parfaitement fonctionné.

6
Tom E.C

Vous pourriez avoir une sortie (peut-être une sortie erreur/débogage) qui précède votre appel à

header("Content-type: text/xml");

Par conséquent, le contenu livré au navigateur n'est pas "xml" ... c'est ce que le message d'erreur essaie de vous dire (du moins c'était le cas pour moi et j'ai eu le même message d'erreur que vous avez décrit).

3
John Erck

Sur chaque boucle de l'ensemble de résultats, vous ajoutez un nouvel élément racine au document, créant un document XML comme celui-ci:

<?xml version="1.0"?>
<mycatch>...</mycatch>
<mycatch>...</mycatch>
...

Un document XML ne peut avoir qu'un seul élément racine, c'est pourquoi l'erreur indique qu'il y a du "contenu supplémentaire". Créez un seul élément racine et ajoutez tous les éléments mycatch à cela:

$root = $dom->createElement("root");
$dom->appendChild($root);
// ...
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->createElement("mycatch");
  $root->appendChild($node);
3
Brett Kail