Creer du XML a partir d'une base de donnée

Fermé
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 - 19 mai 2010 à 12:24
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 - 25 mai 2010 à 12:42
Bonjour,

Est-il possible de creer un fichier XML à partir de php sans utiliser d'extension. On ma explique c'était possible en mettant echo('<?xml version="1.0" encoding="ISO-8859-1"?>'); pour dire que ca va être un fichier XML qui sera générer à partir de PHP. Ensuite je suppose que c'est à moi de faire en sorte que les résultats de chaque élements se place dans les bonnes balises.

Je voulais votre avis pour savoir si c'est réellement fesable ou si c'est déconseillé.

Cordialement,
ApprentiDev

A voir également:

16 réponses

hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
19 mai 2010 à 12:28
Oui c'est possible même si tu ne fait que générer un code et pas créer un fichier XML...

En faite, c'est exactement la même chose que pour faire un tableau HTML ou une liste ordonnée à partir de php, sauf que tu remplace les "<table>, <tr>, <td>" ou "<ul>, <li>" par des "<?xml version="1.0" encoding="ISO-8859-1"?>, <nombalise>, ..."

A+
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
19 mai 2010 à 13:52
Donc si j'ai bien compris je peux faire

echo <nombalise>,
requete SQL pour que les éléments correspondant à nom balise s'affiche
echo <nombalise2>,
requête SQL pour que l'élément correspondant a nom balise 2 s'affiche
echo </nombalise2>,
echo </nombalise>,

Merci de ta réponse.
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
19 mai 2010 à 14:07
Oui voila c'est ça ;)
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
Modifié par apprentiDev le 20/05/2010 à 17:05
Bonjour j'ai modifier le code pour que ce soit plus compréhensible. Vu que ce n'est qu'un exemple je ne met qu'une partie des infos à afficher qui est ici les coordonnées Y et X. Voici le code :

<?php
//phpinfo();
include('config.php');

echo'<?xml version="1.0" encoding="UTF-8"?>';
//header("Content-Type: text/xml; charset=utf-8");


echo"Coordonees Y";
$sql2 = "select Y(coord_scene),X(coord_scene) FROM scene sc";
$resultats2 = mysql_query($sql2);
while ($ligne2=mysql_fetch_array($resultats2)) {
echo"<marker>\n"; // La balise racine
echo "<lat>" . $ligne2['Y(coord_scene)'] . "</lat>\n";
echo "<long>" . $ligne2['X(coord_scene)'] . "</long>\n";
echo"</marker>\n";
}
?>


Cependant firebug me dit qu'il y a une erreur au niveau du header donc du coup je l'ai mis en commentaire. Cependant j'ai vérifier mais la syntaxe me semble exact.
L'erreur annoncé par firebug est: Warning: Cannot modify header information - headers already sent by (output started at /data/web/sites/xxxxxxxx/zzzzz/php/config.php:1) in /data/web/sites/www.xxxxxxxx/zzzzzz/php/ajax_mysql2.php on line 6
Pouvez-vous m'aider ?
En vous remerciant d'avance,
ApprentiDev
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
21 mai 2010 à 10:05
Bonjour à tous,

Concernant le probléme du header je l'ai en parti reglé. Le probléme c'est que en utilisant firebug il me dit que le header est mal forulé. Vu que c'est un documeny XML génère par PHP j'ai mis echo'header("Content-Type: text/xml; charset=utf-8")';

Firebug me marque mal formé <?xml version="1.0" encoding="UTF-8"?>...ype: text/xml; charset=utf-8")<marker>

C'est comme si pour lui le header est composé des lignes suivantes :
echo'<?xml version="1.0" encoding="UTF-8"?>';
echo'header("Content-Type: text/xml; charset=utf-8")';

echo"<marker>\n"; // La balise racine

Je ne comprend pas d'ou viens l'erreur.

Voici le code complet :
<?php
//phpinfo();
include('config.php');
//echo "cocou dez";
echo'<?xml version="1.0" encoding="UTF-8"?>';
echo'header("Content-Type: text/xml; charset=utf-8")';


$sql2 = "select Y(coord_scene),X(coord_scene),id_scene,trace_scene FROM scene sc";
$resultats2 = mysql_query($sql2);
while ($ligne2=mysql_fetch_array($resultats2)) {
echo"<marker>\n"; // La balise racine
echo "<lat>" . $ligne2['Y(coord_scene)'] . "</lat>\n"; // balise pour les latitude
echo "<long>" . $ligne2['X(coord_scene)'] . "</long>\n"; //balise pour longitude
echo "<nom>" . $ligne2['id_scene'] . "</nom>\n"; // balise pour le nom
echo "<url>" . $ligne2['trace_scene'] . "</url>\n"; // pour l'url
echo"</marker>\n";
}
?>

En vous remerciant d'avance,
ApprentiDev
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
21 mai 2010 à 10:18
echo'header("Content-Type: text/xml; charset=utf-8")';


Ca n'existe aps tout simplement ! Le header est une instruction php, pas du texte à afficher !

header("Content-Type: text/xml; charset=utf-8");


La ça peut marcher :p
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
21 mai 2010 à 10:23
Je l'ai fait mais cette fois j'ai l'erreur warning: Cannot modify header information - headers already sent by (output started at /data/web/sites/xxxxxxxxxxx/zzzzzz/php/config.php:1) in /data/web/sites/xxxxxxxx/zzzzz/php/ajax_mysql2.php on line 6
( voir post précedent en fin de message)

Merci de ton aide.
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
21 mai 2010 à 10:24
Et dans config.php des fois, tu n'aurait pas de header ?
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
Modifié par apprentiDev le 21/05/2010 à 10:34
Voici le code de config.php ( j'ai juste enlevé les informations sensible)

<?php
$base = '';
$user = '';
$pass = '';
$serveur = '';
mysql_connect($serveur,$user,$pass) or die("erreur de connexion au serveur");
mysql_select_db($base) or die("erreur de connexion a la base de donnees");
?>
et firebug me met l'erreur suivante :
déclaration XML mal formée
<?xml version=1.0 encoding=UTF-8?>head...Type: text/xml; charset=utf-8)<marker>
alors qu'il n'y a, que le header qui a éte remis corectement
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
21 mai 2010 à 10:50
Enlève le header pour voir ?
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
Modifié par apprentiDev le 21/05/2010 à 11:16
En enlevant le header j'obtiens:
données incompréhensibles après l'élément de document
[Break on this error] <?xml version="1.0" encoding="UTF-8"?>...197320153</nom><url>201</url></marker>

Or c'est le code pour l'affichage des balises avec les informations à fournir.
Aprés la balise fermante de marker

Il n'y a rien aprés la balise fermante a part le } pour fermer le while et le ?> qui ferme la partie php.

(Je remets le code)

<?php
//phpinfo();
include('config.php');
//echo "cocou dez";
echo'<?xml version="1.0" encoding="UTF-8"?>';



$sql2 = "select Y(coord_scene),X(coord_scene),id_scene,trace_scene FROM scene sc LIMIT 10";
$resultats2 = mysql_query($sql2);
while ($ligne2=mysql_fetch_array($resultats2)) {
echo"<marker>"; // La balise racine
echo "<lat>" . $ligne2['Y(coord_scene)'] . "</lat>"; // balise pour les latitude
echo "<long>" . $ligne2['X(coord_scene)'] . "</long>"; //balise pour longitude
echo "<nom>" . $ligne2['id_scene'] . "</nom>"; // balise pour le nom
echo "<url>" . $ligne2['trace_scene'] . "</url>"; // pour l'url
echo"</marker>";
}
?>

et si ca peut aider voici le code qui doit lire les informations :

var urlstr = "http://zzzzzzzzzzzzzzr/xxxxxxx/php/ajax_mysql2.php";
alert("ajax javascript");
GDownloadUrl(urlstr, function(data) {
var xml = GXml.parse(data);
alert("Creation marqueur");
var markers = xml.documentElement.getElementsByTagName("marker");
alert("la boucle for");
for (var i = 0; i < 2; i++) {
alert("eolo");
var nom = markers[i].getAttribute("nom");
alert("nom marqueur");
var url = markers[i].getAttribute("url");
var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("long")));
alert("var point")
var marker = createMarker(point,nom,url);
map.addOverlay(marker);
}
});
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
21 mai 2010 à 11:15
Essaye ça à tout hasard :
<?php
@header("Content-Type: text/xml; charset=utf-8"); // le @ sert a masquer les erreurs, le header se place généralement en début de page sauf cas exceptionnel

include('config.php');
echo'<?xml version="1.0" encoding="UTF-8"?>';

$sql2 = "select Y(coord_scene),X(coord_scene),id_scene,trace_scene FROM scene sc LIMIT 10";
$resultats2 = mysql_query($sql2);
while ($ligne2=mysql_fetch_array($resultats2)){
	echo"<marker>"; // La balise racine
	echo "<lat>" . $ligne2['Y(coord_scene)'] . "</lat>"; // balise pour les latitude
	echo "<long>" . $ligne2['X(coord_scene)'] . "</long>"; //balise pour longitude
	echo "<nom>" . $ligne2['id_scene'] . "</nom>"; // balise pour le nom
	echo "<url>" . $ligne2['trace_scene'] . "</url>"; // pour l'url
	echo"</marker>";
}
?>

0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
25 mai 2010 à 10:59
Bonjour,

Après modification j'ai réussi à créer un XML qui a cette tête la :

<markers>
<marker> lat= 8.12 long= 8.35nom=1001197620254 url=202
</marker>
</markers>

Le problème c'est qu'il me faudrait un XML plutôt comme ceci :


<markers>
<marker lat="8.12" long="8.35" nom="1001197620254" url="202" />
</markers>

Cependant quand je modifie mon code pour obtenir ce nouveau résultat j'obtient toujours XML mal construit. J'ai pensé que ça venait des guillemets mais j'ai beau les changer de place je trouve la même erreur.

Si vous pouvez m'aider, je vous remercie d'avance,

ApprentiDev
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
25 mai 2010 à 11:09
As-tu vérifié ton DTD ?
Peux-tu mettre ton nouveau code ainsi que celui qui te met l'erreur ?
As-tu bien déclaré ton document XML comme il se doit ?

Plus d'infos : https://www.commentcamarche.net/contents/1332-xml-introduction-a-xml
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
25 mai 2010 à 11:13
Bonjour hack_net,

Je n'ai pas mis de DTD car j'ai compris que ce n'etais pas obligatoire. Si ce n'est pas le cas quand faut-il le mettre ou non?

Voici le nouveau code :

<?php
//phpinfo();
header("Content-Type: text/xml; charset=utf-8");
include('config.php');

echo'<?xml version="1.0" encoding="UTF-8"?>';


echo "<markers>";
$sql2 = "select Y(coord_scene),X(coord_scene),id_scene,trace_scene FROM scene sc LIMIT 1";
$resultats2 = mysql_query($sql2);
while ($ligne2=mysql_fetch_array($resultats2)) {
echo"<marker lat= ". $ligne2['Y(coord_scene)'] .
" long= ". $ligne2['X(coord_scene)'] .
"nom=" . $ligne2['id_scene'] .
" url=" . $ligne2['trace_scene'] . "
/>";


}
echo "</markers>";
?>
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
25 mai 2010 à 11:47
Le code a l'air correct...

En effet, le DTD n'est pas obligatoire, cependant, il est vivement recommander ! A quoi sert-il ? Il sert a définir au navigateur de quel "type" il est (quel version du langage, ...).
Bref, si dans une version de XML les balise de type <balise argument1="contenu" /> est interdit, et que tu ne spécifie pas de quel type est ton XML, il peut y avoir des erreur de ce style... Je ne connais pas bien le XML pour le moment donc je ne pourrait pas te dire si je viens de dire une bêtise, mais en tout cas, il est bien plus préférable de mettre les DTD...

A+
0
apprentiDev Messages postés 154 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 1 mai 2013 4
Modifié par apprentiDev le 25/05/2010 à 11:54
Merci de tes informations.

Bon si le code te semble corect c'est toujours qu'il ne doit pas y avoir de grosse faute.
Pour le DTD tu le construit ou dans le code? Je sais comment on le construit mais pas ou est ce qu'on le met dans le code.
Je te remercie d'avoir regardé le code.
0
hack_net Messages postés 783 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 5 juin 2014 51
25 mai 2010 à 12:42
Quand tu regardes le lien plus haut que je t'ai donné, et que tu continus dans le chapitre, tu arrives à :
https://www.commentcamarche.net/contents/1334-structure-d-un-document-xml
puis
https://www.commentcamarche.net/contents/1330-presentation-des-dtd
etc...

Voilà ;)

A+
0