Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 

#1 26-10-2007 08:01:17

adi
Membre
Date d'inscription: 26-10-2007
Messages: 3

SimpleXml balise problematique

Bonjour à tous
je débute avec simplexml en essayant de rassembler des bribes de souvenir en PHP!  Voici donc un fichier xml que je dois requeter:

Code:

<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" xmlns:mappoint="http://virtualearth.msn.com/apis/annotate#">
<channel>
        <title>Zones etudes KSpot</title>
        <link></link>
        <description>Localisation des zones d'etudes disponible dans KSPOT adi pour Kyris mai 2007</description>
        <mappointIntlCode>cht</mappointIntlCode>
    <item>
        <title>590510000</title>
        <link></link>
        <description>0;Croix:3;Marc en Baroeul:2,5;Orvault;</description>
        <geo:lat> 50.5388373881578</geo:lat>
        <geo:long> 2.80992893502116</geo:long>
    </item>
    <item>
        <title>596230000</title>
        <link></link>
        <description>0;Croix:15,5;Marc en Baroeul:0;Orvault;</description>
        <geo:lat> 50.0355881731957</geo:lat>
        <geo:long> 3.14659385941923</geo:long>
    </item>
    <item>
        <title>590520000</title>
        <link></link>
        <description>0;Croix:4;Marc en Baroeul:3,5;Orvault;</description>
        <geo:lat> 50.5174185242504</geo:lat>
        <geo:long> 2.89355007000268</geo:long>
    </item>
    <item>
        <title>593200000</title>
        <link></link>
        <description>0;Croix:0;Marc en Baroeul:2,2;Orvault;</description>
        <geo:lat> 50.5635185725987</geo:lat>
        <geo:long> 2.83156916499138</geo:long>
    </item>
</channel>
</rss>

c'est un GEORSS du w3c  et comme vous le remarquerez une des balise est <geo:lat>

Or, cette balise avec ces deux points : en plein milieu me cause soucis car le  code suivant ne parvient pas à récupérer les valeurs de latitude

Code:

<html><head/><body>
<?php
$rss = simplexml_load_file('iris.xml');
foreach ($rss->channel as $channel) {
    foreach ($channel->item as $item) {    
        foreach ($item->description as $description) {
            print "longitude : {$item->geo:lat} <br />\n";
            }
    }
  }
?> 
</body></html>

Je ne peux évidemment pas changer le nom de la balise.. si quelqu'un a une soluce pour mettre la valeur de ces balises dans une variable, je lui serai très reconnaissant!!

Hors ligne

 

#2 26-10-2007 14:34:19

Ekolo
Membre
Date d'inscription: 26-10-2007
Messages: 6

Re: SimpleXml balise problematique

il faut déclarer la fonction geo:lat avant geo-long et essayer de ne pas tenter d'écrire en php car il est parti.

Hors ligne

 

#3 27-10-2007 05:18:21

adi
Membre
Date d'inscription: 26-10-2007
Messages: 3

Re: SimpleXml balise problematique

heu , je ne comprends pas très bien .. tu pourrais me poster un exemple ?

Dernière modification par adi (27-10-2007 05:19:01)

Hors ligne

 

#4 02-11-2007 05:31:57

adi
Membre
Date d'inscription: 26-10-2007
Messages: 3

Re: SimpleXml balise problematique

Ekolo a écrit:

il faut déclarer la fonction geo:lat avant geo-long et essayer de ne pas tenter d'écrire en php car il est parti.

c'est bien beau Ekolo, mais ce message ne veut absoluement rien dire
Il n'y a pas de "fonction a déclarer" ni avant ni apres geo-long  quand à PHP qui est parti .. je passe ..

Bon j'ai trouvé la soluce en passant par XPATH
Mais l'astuce et d'utiliser avant une déclaration de namespace pour bien préciser que "geo" est un préfixe

Code:

$rss->registerXPathNamespace('geo', 'http://www.w3.org/2003/01/geo/wgs84_pos#');

Bref le code entier tient dans un mouchoir de poche

Code:

$rss = simplexml_load_file('iris.xml');
$rss->registerXPathNamespace('geo', 'http://www.w3.org/2003/01/geo/wgs84_pos#');

$result = $rss->xpath('//geo:lat');

foreach ($result as $title) {
  print "latitude : " . $title . "<br />\n";
}

et php n'est pas parti!!!!

Hors ligne