j'ai commencé mais pas encore bien loin j'ai plein de choses a effectué j'en suis a la fin de l'introduction.
Version imprimable
j'ai commencé mais pas encore bien loin j'ai plein de choses a effectué j'en suis a la fin de l'introduction.
Je tente de contribuer à ce truc. Comme je ne connais pas la gestion du xml en PHP (déjà faite en js, mais ce n'était pas de la POO), je tente déjà de faire tourner l'exemple extra-simple de Benjamin Delespierre.
En 2e ligne du code, il y a $doc->loadXML($xml); Or cela exige le PHP 5. Comme je n'ai pas encore ça chez mes hébergeurs, j'ai tenté de l'activer sur un compte Free avec un .htaccess contenant "php 1", mais ça se termine par un warning :Quelqu'un pourrait-il m'aider ?Code:Warning: DOMDocument::loadXML() [function.DOMDocument-loadXML]: Start tag expected, '<' not found in Entity, line: 1 in /mnt/163/sda/2/6/laurentschmitt18/xml/xml.php on line 8
Free n'est pas un hébergeur digne de ce nom. Si toutefois tu veux passer en PHP 5, il faut le spécifier dans le .htaccess:
Code:
1
2
3
4
5
6
7 php 1 SetEnv PHP_VER 5 ##Passage register globals off SetEnv REGISTER_GLOBALS 0 ## identifiant de session placé dans le cookie SetEnv SESSION_USE_TRANS_SID 0
Même en ayant copié ton code dans mon .htaccess, le warning est le même et de plus, phpinfo me dit encore que je suis en 4.4.3 et sinon, qu'est-ce qu'il a Free, dont une qualité est d'être gratuit ?
@Laurent : Ton fichier XML ne commence pas par "<?xml..." ? Si c'est le cas, est-il en UTF-8 ? Et si c'est le cas, as-tu bienen 1ere ligne ?Code:<?xml version="1.0" encoding="UTF-8"?>
J'ai eu ce type d'erreur avec un fichier encodé en UTF-8 et le BOM me sortait cette erreur (et le XML commençait par <?xml version="1.0" encoding="UTF-16"?> , il n'était pas de moi...)
@Guillaume : Pourrais-tu nous dire où tu en es actuellement ? Je ne pense pas que les gens, ici, feront ton "devoir" à ta place, mais ils t'aiguilleront (comme le fait très bien Benjamin). Le but du BTS, c'est que tu apprennes ;)
Oui aux 2 questions. fichier xmlCitation:
Ton fichier XML ne commence pas par "<?xml..." ? Si c'est le cas, est-il en UTF-8 ?
(UTF8 sans BOM)
@Laurent : effectivement mais quand je le télécharge, il y a 2 lignes vides avant <?xml version="1.0" encoding="utf-8" ?> (ou plutôt 2 sauts de ligne, donc pas réellement du vide ;))
D'ailleurs, firefox me donne une erreur quand j'essaye de l'afficher.
Code:
1
2
3
4
5
6
7<?xml version="1.0" encoding="utf-8" ?> <Ville> ... </Ville>
Tu as raison, pour les sauts de ligne. Mais tout ça est chez Free, et je ne peux m'y connecter depuis le boulot : j'essaierai donc ce soir...
Benjamin Delespierre je viens d’essayer la fonction modifier que tu m'a fournie pendant 2h mais impossible a faire fonctionné, et ci je ne mais pasen commentaire j'ai une erreur.Code://header('Content-Type: text/xml');
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 // Ouvrir un document XML $doc = new DOMDocument; $doc->loadXML($xml); // On va par exemple modifier l'url de la ville de PARIS $xpath = new DOMXPath($doc); $node_list = $xpath->query('//Info[@name="Paris:"]'); foreach ($node_list as $node) { $node->setAttribute('url', 'http://google.fr'); } // On envoie les headers pour le navigateur header('Content-Type: text/xml'); // On affiche le document echo $doc->saveXML();
Et c'est quoi l'erreur ?
Erreur d'analyse XML : aucun élément trouvé
Emplacement : http://serveurlinux......./test.php
Numéro de ligne 2, Colonne 1 :
Il me dit qu'il ne trouve pas de fichier XML alors qu'il ce trouvent dans le même dossier, et quand je mais en commentaire cet ligne, il ne me l'affiche plus ce qui est normale, mais le fichier n'ai en aucun cas modifier.
(voir DOMDocument::loadXML) attends que $xml soit une chaine de caractères qui représente un flux XML et non le path d'un fichier. Pour charger un fichier directement, il suffit d'utiliser DOMDocument::load.Code:$doc->loadXML($xml);
Dans mon exemple, j'avais mis le contenu du fichier dans une chaine de caractères pour simplifier...
J'ai fait ceci, avec j'arrive a savoir combien j'ai de ville dans mon fichier XML, mais j'arrive pas a récupéré le nom des villes et donc pas a les mettre dans une liste pour que l'utilisateur puisse la sélectionné.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 <?php $fichier_xml = "./miniprojet.xml"; try { if (!file_exists($fichier_xml)) { die("Le fichier " . $fichier_xml . " n'existe pas."); } $doc = new DOMDocument("1.0", "utf-8"); if ($doc->load($fichier_xml) == FALSE) { die("Impossible de charger le fichier XML ($fichier_xml)"); } $liste = $doc->getElementsByTagName("Info"); echo "Il y a " . $liste->length . " Ville dans ce fichier XML<br />"; foreach($liste as $ville) { if ($ville->hasAttributes()) { echo "liste des attributs de Ville : <br/>"; for ($i=0;$i<$ville->attributes->length;$i++) echo $noeud->attributes->item($i)->nodeValue . "<br/>"; } echo "Nom des Villes :<br/>"; for ($i=0;$i<$ville->childNodes->length;$i++) echo $ville->childNodes->item($i)->nodeValue . "<br/>"; } } catch (DOMException $e) { die($e->getMessage()); } ?>
Pourtant tu y es presque.
Tu peux faire une liste simplement en itérant:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 try { $doc = new DOMDocument; $doc->loadXML($xml); // remplacer par $doc->load $info_list = $doc->getElementsByTagName('Info'); echo "<h3>Il y a {$info_list->length} villes répertoriées</h3>"; echo '<ul id="villes">'; foreach ($info_list as $node) { if ($node->hasAttribute('name')) echo '<li>' . str_replace(array('.', ':'), '', $node->getAttribute('name')) . '</li>'; } echo '</ul>'; } catch (Exception $e) { die($e->getMessage()); }
Je viens d’essayer votre code, il me trouve 0 ville répertorié alors qu'il y en a 17, et donc aucune liste.
J'ai utilisé ces données pour tester, ça fonctionnait parfaitement:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32$xml = <<< XML <?xml version="1.0" encoding="utf-8" ?> <Ville> <Infos> <Info name="Aix en Provence:" url="http://www.vhello.fr/" lat="43.5262730679307" lng="5.445442199707031"/> <Info name="Amiens:" url="http://www.velam.amiens.fr/" lat="49.900" lng="2.300"/> <Info name="Besançon:" url="http://www.velocite.besancon.fr/" lat="45.567" lng="47.250"/> <Info name="Cergy Pontoise:" url="http://www.velo2.cergypontoise.fr/" lat="49.0368" lng="2.0803"/> <Info name="Marseille:" url="http://www.levelo-mpm.fr/" lat="43.300" lng="5.367"/> <Info name="Mulhouse:" url="http://www.velocite.mulhouse.fr/" lat="47.750" lng="7.350"/> <Info name="Nancy:" url="http://www.velostanlib.fr/" lat="48.700" lng="6.200"/> <Info name="Nantes:" url="http://www.bicloo.nantesmetropole.fr/" lat="47.233" lng="-1.583"/> <Info name="Paris:" url="http://www.velib.paris.fr/" lat="48.833" lng="2.333"/> <Info name="Plaine commune:" url="http://www.velcom.fr/" lat="47.216667" lng="5.133333"/> <Info name="Rouen:" url="http://cyclic.rouen.fr/" lat="49.433" lng="1.083"/> <Info name="Toulouse:" url="http://www.velo.toulouse.fr/" lat="43.617" lng="1.450"/> <Info name="Bruxelles:" url="http://www.villo.be/" lat="50.8333" lng="4.33333"/> <Info name="Dublin:" url="http://www.dublinbikes.ie/" lat="53.333" lng="-6.250"/> <Info name="Luxembourg:" url="http://www.veloh.lu/" lat="49.617" lng="6.133"/> <Info name="Santander:" url="http://www.tusbic.es/" lat="43.467" lng="-3.800"/> <Info name="Séville:" url="http://www.sevici.es/" lat="37.387" lng="-5.991"/> </Infos> <!--Partie d'adresse internet a ajouter a la fin de ladresse internet d'une ville pour avoir accèes au différente station puis au détails des stations--> <complementsURL> <complementURL name="carto" ajout="service/carto"/> <complementURL name="stationdetails" ajout="service/stationdetails/"/> </complementsURL> </Ville> XML;
j'ai fait un copier coller du XML et du code PHP et sous wamp j’obtiens
Citation:
( ! ) Notice: Undefined variable: xml in C:\wamp\www\test\test.php on line 4
Call Stack
# Time Memory Function Location
1 0.0004 681568 {main}( ) ..\test.php:0
Il y a 0 villes répertoriéesCitation:
( ! ) Warning: DOMDocument::loadXML() [domdocument.loadxml]: Empty string supplied as input in C:\wamp\www\test\test.php on line 4
Call Stack
# Time Memory Function Location
1 0.0004 681568 {main}( ) ..\test.php:0
2 0.0005 682616 DOMDocument->loadXML( ) ..\test.php:4
Difficile à croire à moins que tu n'aies mal copié collé.
Le code suivant:
Produit:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48$xml = <<< XML <?xml version="1.0" encoding="utf-8" ?> <Ville> <Infos> <Info name="Aix en Provence:" url="http://www.vhello.fr/" lat="43.5262730679307" lng="5.445442199707031"/> <Info name="Amiens:" url="http://www.velam.amiens.fr/" lat="49.900" lng="2.300"/> <Info name="Besançon:" url="http://www.velocite.besancon.fr/" lat="45.567" lng="47.250"/> <Info name="Cergy Pontoise:" url="http://www.velo2.cergypontoise.fr/" lat="49.0368" lng="2.0803"/> <Info name="Marseille:" url="http://www.levelo-mpm.fr/" lat="43.300" lng="5.367"/> <Info name="Mulhouse:" url="http://www.velocite.mulhouse.fr/" lat="47.750" lng="7.350"/> <Info name="Nancy:" url="http://www.velostanlib.fr/" lat="48.700" lng="6.200"/> <Info name="Nantes:" url="http://www.bicloo.nantesmetropole.fr/" lat="47.233" lng="-1.583"/> <Info name="Paris:" url="http://www.velib.paris.fr/" lat="48.833" lng="2.333"/> <Info name="Plaine commune:" url="http://www.velcom.fr/" lat="47.216667" lng="5.133333"/> <Info name="Rouen:" url="http://cyclic.rouen.fr/" lat="49.433" lng="1.083"/> <Info name="Toulouse:" url="http://www.velo.toulouse.fr/" lat="43.617" lng="1.450"/> <Info name="Bruxelles:" url="http://www.villo.be/" lat="50.8333" lng="4.33333"/> <Info name="Dublin:" url="http://www.dublinbikes.ie/" lat="53.333" lng="-6.250"/> <Info name="Luxembourg:" url="http://www.veloh.lu/" lat="49.617" lng="6.133"/> <Info name="Santander:" url="http://www.tusbic.es/" lat="43.467" lng="-3.800"/> <Info name="Séville:" url="http://www.sevici.es/" lat="37.387" lng="-5.991"/> </Infos> <!--Partie d'adresse internet a ajouter a la fin de ladresse internet d'une ville pour avoir accèes au différente station puis au détails des stations--> <complementsURL> <complementURL name="carto" ajout="service/carto"/> <complementURL name="stationdetails" ajout="service/stationdetails/"/> </complementsURL> </Ville> XML; try { $doc = new DOMDocument; $doc->loadXML($xml); // remplacer par $doc->load $info_list = $doc->getElementsByTagName('Info'); echo "<h3>Il y a {$info_list->length} villes répertoriées</h3>"; echo '<ul id="villes">'; foreach ($info_list as $node) { if ($node->hasAttribute('name')) echo '<li>' . str_replace(array('.', ':'), '', $node->getAttribute('name')) . '</li>'; } echo '</ul>'; } catch (Exception $e) { die($e->getMessage()); }
Code:
1
2 <h3>Il y a 17 villes répertoriées</h3><ul id="villes"><li>Aix en Provence</li><li>Amiens</li><li>Besançon</li><li>Cergy Pontoise</li><li>Marseille</li><li>Mulhouse</li><li>Nancy</li><li>Nantes</li><li>Paris</li><li>Plaine commune</li><li>Rouen</li><li>Toulouse</li><li>Bruxelles</li><li>Dublin</li><li>Luxembourg</li><li>Santander</li><li>Séville</li></ul>
Le code ne fonctionnaire t'il pas que en php5 ?
je n'ai rien dit car ma version php sur wamp est: Version de PHP: 5.3.4