Fichier XML et php
Résolu
xyeuh
Messages postés
58
Statut
Membre
-
xyeuh Messages postés 58 Statut Membre -
xyeuh Messages postés 58 Statut Membre -
Bonjour,
Ayant je pense écumer tous les forum que j'ai pu trouver je viens vous demander de l'aide.
J'ai un fichier XML et je voudrais afficher son contenu dans une page web PHP.
Voici mon fichier xml:
<log>
<gare Code="17192">
<semaine jour="0">
<train>840800</train>
</semaine>
<semaine jour="0">
<train>2778</train>
</semaine>
<semaine jour="1">
<train>840502</train>
</semaine>
<semaine jour="0">
<train>840600</train>
</semaine>
<semaine jour="1">
<train>5420</train>
</semaine>
<semaine jour="0">
<train>5401</train>
</semaine>
<semaine jour="1">
<train>840501</train>
</semaine>
<semaine jour="1">
<train>840504</train>
</semaine>
<semaine jour="1">
<train>5486</train>
</semaine>
<semaine jour="1">
<train>840601</train>
</semaine>
</gare>
</log>
Mon script php :
<?php
$dom = new DomDocument;
$dom->Load("./log_import_aut/log.xml");
print_r($dom);
$racine = $dom->documentElement;
$gare = $racine->getElementsByTagName('gare');
if(@$dom->validate())
{
foreach($gare as $contenu)
{
$semaine = $contenu->getElementsByTagName('semaine');
$train = $semaine->item(0)->getElementsByTagName('train');
foreach($train as $value)
{
echo "<li>";
echo $value->firstChild->nodeValue;
echo "</li>";
}
echo "</ul>";
}
}
else $dom->validate();
?>
Merci d'avance pour votre aide.
Cordialement,
Xyeuh.
Ayant je pense écumer tous les forum que j'ai pu trouver je viens vous demander de l'aide.
J'ai un fichier XML et je voudrais afficher son contenu dans une page web PHP.
Voici mon fichier xml:
<log>
<gare Code="17192">
<semaine jour="0">
<train>840800</train>
</semaine>
<semaine jour="0">
<train>2778</train>
</semaine>
<semaine jour="1">
<train>840502</train>
</semaine>
<semaine jour="0">
<train>840600</train>
</semaine>
<semaine jour="1">
<train>5420</train>
</semaine>
<semaine jour="0">
<train>5401</train>
</semaine>
<semaine jour="1">
<train>840501</train>
</semaine>
<semaine jour="1">
<train>840504</train>
</semaine>
<semaine jour="1">
<train>5486</train>
</semaine>
<semaine jour="1">
<train>840601</train>
</semaine>
</gare>
</log>
Mon script php :
<?php
$dom = new DomDocument;
$dom->Load("./log_import_aut/log.xml");
print_r($dom);
$racine = $dom->documentElement;
$gare = $racine->getElementsByTagName('gare');
if(@$dom->validate())
{
foreach($gare as $contenu)
{
$semaine = $contenu->getElementsByTagName('semaine');
$train = $semaine->item(0)->getElementsByTagName('train');
foreach($train as $value)
{
echo "<li>";
echo $value->firstChild->nodeValue;
echo "</li>";
}
echo "</ul>";
}
}
else $dom->validate();
?>
Merci d'avance pour votre aide.
Cordialement,
Xyeuh.
8 réponses
-
Salut,
Tu peux peut être trouver ton bonheur là :
https://forums.commentcamarche.net/forum/affich-12613748-affiche-contenu-fichier-xml-en-php
-
Merci, de ton aide mais j'ai déja regarder ce topic sans succès.
Cordialement,
Xyeuh -
-
Non aucun, le seul truc c'est que mon print_r m'affiche:
DOMDocument Object ( )
c'est tous ce que j'ai. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Si tu fais un :
echo $dom->textContent;
au niveau du print_r tu récupère pas les valeurs?
-
C'est peut être bête mais vérifie ton chemin avec un file_exists("./log_import_aut/log.xml") parce que ça marche chez moi !
-
-
@xyeuh,
ton problème vient de l'utilisation de la méthode validate() alors que tu n'as pas défini de DTD . En gros cela signifie que tu demandes la validation de ton document mais sans dire vis-à-vis de quelles règles il faut le faire.
De surcroît tu appelles la méthode avec un '@' (@$dom->validate()), ce qui a pour effet de passer les erreurs sous silence. Autrement, avec un niveau de log approprié, tu aurais pu voir le message suivant dans les logs php :
PHP Warning: DOMDocument::validate(): no DTD found! ...
Etant donné ton besoin apparent, je te conseille d'utiliser la librairie simplexml qui sera plus intuitive pour ce que tu essayes de faire --> https://www.php.net/manual/fr/function.simplexml-load-file.php
-
-
Bonjour,
j'ai donc utilisé simplexml et donc modifié mon script,
mais je n'arrive toujours pas afficher les données
Script php :
$fichierxml = simplexml_load_file('./log_import_aut/log.xml');
print_r ($fichierxml);
foreach($fichierxml->gare as $gare)
{
//echo $gare->semaine;
foreach($gare->train as $train)
{
echo $train;
}
}
XML
<log>
<gare Code="17192">
<semaine jour="0">
<train>840800</train>
</semaine>
<semaine jour="0">
<train>2778</train>
</semaine>
<semaine jour="1">
<train>840502</train>
</semaine>
<semaine jour="0">
<train>840600</train>
</semaine>
<semaine jour="1">
<train>5420</train>
</semaine>
<semaine jour="0">
<train>5401</train>
</semaine>
<semaine jour="1">
<train>840501</train>
</semaine>
<semaine jour="1">
<train>840504</train>
</semaine>
<semaine jour="1">
<train>5486</train>
</semaine>
<semaine jour="1">
<train>840601</train>
</semaine>
</gare>
</log>
Merci pour vos précédente réponse.
cordialement,
xyeuh. -
@xyeuh:
Tu ne traverses pas correctement ton fixhier xml.
Ton xml a la structure suivante :
log (noeud racine) > gare > semaine > train
Autrement un noeud "log" contient un (ou plusieurs) noeuds "gare".
Autrement un noeud "gare" contient un (ou plusieurs) noeuds "semaine".
Ainsi de suite.
Du coup quand tu faisforeach($gare->train as $train)
ça ne peut pas te renvoyer de résultat puisque que dans un noeud "gare" on a d'abord des noeuds "semaine" et non pas "train".
Pour afficher des résultat, tu devrais plutôt faire quelque chose de la formeforeach($fichierxml->gare as $gare) { foreach($gare->semaine as $semaine) { foreach($semaine->train as $train) { echo $train; } } }
J'ai fait une démo que tu peux voir par ici --> https://ideone.com/m1nqhe -
-
-