Besoin d'aide en DOM et PHP
rose77
-
rose77 -
rose77 -
Bonjour, j'ai un document xml dont je veux extraire les données et les insérer dans une table mysql. Je rédige le programme en php et j'utilise dom pour extraire les données du xml. J'ai des warning à l'exécution des boucles FOREACH quelqu'un s'y connait-il?
A voir également:
- Besoin d'aide en DOM et PHP
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour à la ligne php ✓ - Forum PHP
- Retour a la ligne avec Echo comment faire ? - Forum Webmastering
- Crush dom tom - Forum Consommation & Internet
11 réponses
peux tu donner les exemples de lignes de code qui génèrent les warning ainsi que les messages d'erreur ?
Merci d'avoir répondu les message d'erreur sont Warning: Invalid argument supplied for foreach() in C:\... à chaque tour des foreach
en fait le programme est le suivant:
<?php
$fichier = "test.xml";
$racine=$dom->documentElement;
echo "L'element racine se nomme : ", $racine->nodeName;
$tab=$racine->childNodes;
//$nb=count($tab);
foreach($tab as $enfant){
echo $enfant->nodeName;
$tab1=$enfant->childNodes;
foreach($tab1 as $enfant1){
echo $enfant1->nodeName;
$tab2=$enfant1->childNodes;
foreach($tab2 as $enfant2){
echo $enfant2->nodeName;
$tab3=$enfant2->childNodes;
foreach($tab3 as $enfant3){
echo $enfant3->nodeName;
echo $enfant3->nodeValue;}}}}
?>
pour extraire les données du fichier xml suivant:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE continents SYSTEM "test.dtd">
<POSTE>
<PAC>
<COD type="gfj">75101</COD>
<DAT nom="date fin periode">20051031</DAT>
<GROUPE nom="col" type="coli">0</GROUPE>
<GROUPE nom="env" type="envel">4</GROUPE>
<GROUPE nom="chr" type="chrono">3</GROUPE>
<coli/>
<envel>
<envoi>
<date nom="dat">20051001</date>
<cp nom="cp">78900</cp>
<adre nom="adre">4 rue du tedo</adre>
<ville nom="ville">paris</ville>
</envoi>
<envoi>
<date nom="dat">20051010</date>
<cp nom="cp">15646</cp>
<adre nom="adre">4 av sdgsog</adre>
<ville nom="ville">ducro</ville>
</envoi>
<envoi>
<date nom="dat">20050801</date>
<cp nom="cp">15645</cp>
<adre nom="adre">8 rue de tarb</adre>
<ville nom="ville">tredo</ville>
</envoi>
<envoi>
<date nom="dat">20050601</date>
<cp nom="cp">78900</cp>
<adre nom="adre">8 bd faut</adre>
<ville nom="ville">paris</ville>
</envoi>
</envel>
<chrono>
<envoi>
<date nom="dat">20050701</date>
<cp nom="cp">78900</cp>
<adre nom="adre">6 bd jean</adre>
<ville nom="ville">reins</ville>
</envoi>
<envoi>
<date nom="dat">20050601</date>
<cp nom="cp">78900</cp>
<adre nom="adre">4 rue du tedo</adre>
<ville nom="ville">paris</ville>
</envoi>
<envoi>
<date nom="dat">20050517</date>
<cp nom="cp">54645</cp>
<adre nom="adre">19 bis rue franc</adre>
<ville nom="ville">brazil</ville>
</envoi>
</chrono>
</PAC>
</POSTE>
<?php
$fichier = "test.xml";
$racine=$dom->documentElement;
echo "L'element racine se nomme : ", $racine->nodeName;
$tab=$racine->childNodes;
//$nb=count($tab);
foreach($tab as $enfant){
echo $enfant->nodeName;
$tab1=$enfant->childNodes;
foreach($tab1 as $enfant1){
echo $enfant1->nodeName;
$tab2=$enfant1->childNodes;
foreach($tab2 as $enfant2){
echo $enfant2->nodeName;
$tab3=$enfant2->childNodes;
foreach($tab3 as $enfant3){
echo $enfant3->nodeName;
echo $enfant3->nodeValue;}}}}
?>
pour extraire les données du fichier xml suivant:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE continents SYSTEM "test.dtd">
<POSTE>
<PAC>
<COD type="gfj">75101</COD>
<DAT nom="date fin periode">20051031</DAT>
<GROUPE nom="col" type="coli">0</GROUPE>
<GROUPE nom="env" type="envel">4</GROUPE>
<GROUPE nom="chr" type="chrono">3</GROUPE>
<coli/>
<envel>
<envoi>
<date nom="dat">20051001</date>
<cp nom="cp">78900</cp>
<adre nom="adre">4 rue du tedo</adre>
<ville nom="ville">paris</ville>
</envoi>
<envoi>
<date nom="dat">20051010</date>
<cp nom="cp">15646</cp>
<adre nom="adre">4 av sdgsog</adre>
<ville nom="ville">ducro</ville>
</envoi>
<envoi>
<date nom="dat">20050801</date>
<cp nom="cp">15645</cp>
<adre nom="adre">8 rue de tarb</adre>
<ville nom="ville">tredo</ville>
</envoi>
<envoi>
<date nom="dat">20050601</date>
<cp nom="cp">78900</cp>
<adre nom="adre">8 bd faut</adre>
<ville nom="ville">paris</ville>
</envoi>
</envel>
<chrono>
<envoi>
<date nom="dat">20050701</date>
<cp nom="cp">78900</cp>
<adre nom="adre">6 bd jean</adre>
<ville nom="ville">reins</ville>
</envoi>
<envoi>
<date nom="dat">20050601</date>
<cp nom="cp">78900</cp>
<adre nom="adre">4 rue du tedo</adre>
<ville nom="ville">paris</ville>
</envoi>
<envoi>
<date nom="dat">20050517</date>
<cp nom="cp">54645</cp>
<adre nom="adre">19 bis rue franc</adre>
<ville nom="ville">brazil</ville>
</envoi>
</chrono>
</PAC>
</POSTE>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui j'ai vu
Apparament les tableaux de noeud retournés par child nodes sont invalides.
Je n'ai pas de plateforme php avec DOM sous la main pour tester mais je regarderais dès que possible
Apparament les tableaux de noeud retournés par child nodes sont invalides.
Je n'ai pas de plateforme php avec DOM sous la main pour tester mais je regarderais dès que possible
En relisant le texte de plus près je m'apperçois que l'objet $dom n'a pas été créé et le fichier n'a pas été chargé :
$dom=new DOMDocument;
$dom->load($fichier);
Selon la version de DOMXML il faudra peut être des arguments supplémentaires : voir la doc.
Le reste devrait fonctionner
$dom=new DOMDocument;
$dom->load($fichier);
Selon la version de DOMXML il faudra peut être des arguments supplémentaires : voir la doc.
Le reste devrait fonctionner
excuse moi j'au coupé le script , j'avais créé le $dom avant:
$fichier = "test.xml";
$dom = new DOMDocument();
$dom->load($fichier);
et il m'affiche bien le bon résultat de la racine à la ligne: echo "L'element racine se nomme : ", $racine->nodeName;
$fichier = "test.xml";
$dom = new DOMDocument();
$dom->load($fichier);
et il m'affiche bien le bon résultat de la racine à la ligne: echo "L'element racine se nomme : ", $racine->nodeName;