Problème pour parser un XML
spaceshipone
Member
Bonjour,
Voici mon problème :
J'ai un fichier XML qui se présente sous la forme :
Voici ma fonction pour parser :
Voici mon problème :
J'ai un fichier XML qui se présente sous la forme :
<channel>
<item>
<title>Paris, France</title>
<link></link>
<meteo:weather date="28 Avril" link="http://www.meteorologic.net/meteo-france/Oraison_1622.html" tempe_matin="13.8" namepictos_matin="Voilé" pictos_matin="voile" tempe_midi="19.1" namepictos_midi="Voilé" pictos_midi="voile" tempe_apmidi="19.8" namepictos_apmidi="Couvert" pictos_apmidi="couvert" tempe_soir="17" namepictos_soir="Couvert" pictos_soir="couvert" />
<meteo:weather date="29 Avril" link="http://www.meteorologic.net/meteo-france/Oraison_1622.html" tempe_matin="15.2" namepictos_matin="Dégagé" pictos_matin="soleil" tempe_midi="19.9" namepictos_midi="Dégagé" pictos_midi="soleil" tempe_apmidi="21.1" namepictos_apmidi="Dégagé" pictos_apmidi="soleil" tempe_soir="16.2" namepictos_soir="Dégagé" pictos_soir="soleil" />
<meteo:weather date="30 Avril" link="http://www.meteorologic.net/meteo-france/Oraison_1622.html" tempe_matin="12.5" namepictos_matin="Voilé" pictos_matin="voile" tempe_midi="17.9" namepictos_midi="Nuageux" pictos_midi="nuageux" tempe_apmidi="19.7" namepictos_apmidi="Dégagé" pictos_apmidi="soleil" tempe_soir="15.1" namepictos_soir="Dégagé" pictos_soir="soleil" />
<pubDate>Wed, 28 Apr 2010 09:44:16 +0100</pubDate>
</item></channel>
Lorsque j'utilise ma fonction pour le parser, les éléments meteo n'apparaissent pas. J'aimerai savoir pourquoi et comment puis je les récuperer.Voici ma fonction pour parser :
$xml = simplexml_load_file('mon_fichier.xml') ;
$data='';
foreach($xml->channel->item as $item)
{
$titre=$item->title;
//Si la ville n'est pas trouvée, on retourne NO
if($titre == 'City not found')
{
$data = "NO";
}
else
{
$lien=$item->link;
$data .= $lien."<br><br>";
$data .= $titre."<br><br>";
$explode_weather = explode('<meteo:weather',$item->meteo);
for($i=1;$i<count($explode_weather);$i++)
{
$data .= self::extract_data($explode_weather[$i])."<br>";
}
}
}
return $data;
et voici le résultat que ça me donne quand je fais un print_r($xml);SimpleXMLElement Object
(
[channel] => SimpleXMLElement Object
(
[item] => SimpleXMLElement Object
(
[title] => Paris, France
[link] =>
[pubDate] => Wed, 28 Apr 2010 09:44:16 +0100
)
)
)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne suis pas un spécialiste, mais il y a une chose qui me saute au yeux: Le "</link>" est mal placé, il devrait se trouver après tes éléments météo.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
http://www.lephpfacile.com/manuel-php/function.simplexml-element-getDocNamespaces.php
Cordialement,
gcyrillus , simple membre du forum et utilisateur de pluxml
Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci
Utilise la méthode $item -> children('meteo') pour récupérer tous les noeuds <meteo:weather> comme ceci :
Je n'ai pas testé mais normalement, cela devrait ok pour récupérer les infos.
@+
Je te renvoie à cet article qui te donne une astuce si le nom du namespace n'est pas pris en compte.
http://www.journaldunet.com/developpeur/tutoriel/php/040921-php-seguy-simplexml-1e.shtml
@+