A voir également:
- Toujours au sujet de Dom pour xml!!
- Xml viewer - Télécharger - Édition & Programmation
- Office xml handler - Télécharger - Traitement de texte
- Driveimage xml - Télécharger - Sauvegarde
- Format office open xml ou opendocument - Forum Bureautique
- Sujet de tfc déjà travaille en informatique pdf ✓ - Forum Études / Formation High-Tech
2 réponses
Merci pour ton intervention. Voilà j'ai un doc xml dont je dois extraire des données avec DOM pour les inserer dans unebase de donnée. le doc xml est le 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>
et le doc php:
<?php
//$ora=oci_connect("localhost","3p","");
$fichier = "test.xml";
$dom = new DOMDocument();
$dom->load($fichier);
// test pour voir si le document est conforme à sa DTD
//if(!$dom->Validate( "test.xml" )){
// echo "Validation DTD n'est pas OK\n";
// print_r($error);
//} else {
// echo "Validation OK\n";
$racine=$dom->documentElement;
echo "L'element racine se nomme : ", $racine->nodeName;
//$tab=$dom->getElementsByTagName('PAC');
//echo $enfant->nodeName;
$tab=$racine->childNodes;
//$nb=count($tab);
foreach($tab as $enfant){
$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;}}}}
?>
Lorsque j'exécute le programme il y a un warning à chaque tour du foreach. effectivement le premier foreach renvoie une seule ligne mais je dois prévoir le cas où il y aurait plusieurs enfants.
<?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>
et le doc php:
<?php
//$ora=oci_connect("localhost","3p","");
$fichier = "test.xml";
$dom = new DOMDocument();
$dom->load($fichier);
// test pour voir si le document est conforme à sa DTD
//if(!$dom->Validate( "test.xml" )){
// echo "Validation DTD n'est pas OK\n";
// print_r($error);
//} else {
// echo "Validation OK\n";
$racine=$dom->documentElement;
echo "L'element racine se nomme : ", $racine->nodeName;
//$tab=$dom->getElementsByTagName('PAC');
//echo $enfant->nodeName;
$tab=$racine->childNodes;
//$nb=count($tab);
foreach($tab as $enfant){
$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;}}}}
?>
Lorsque j'exécute le programme il y a un warning à chaque tour du foreach. effectivement le premier foreach renvoie une seule ligne mais je dois prévoir le cas où il y aurait plusieurs enfants.