[XML] lire un fichier xml

lire un fichier xml [XML] - PHP - Programmation

Marsh Posté le 10-08-2006 à 18:35:58    

Je travaille sous php 4,3.
 
Je souhaiterais effectuer la lecteur d'un fichier XML pour par la suite l'intégrer dans ma bd mysql comme je le souhaite.
 
Le problème c'est que je n'arrive pas à trouver de moyen pour parser corectement mon fichier
 
quand j'affiche la ou ce trouve mon parseur, on peut voir qu'il s'est arrêté au niveau du noeud et n'a pas voulu continuer plus loin.
voici mon code que j'ai réalisé pour le moment :
 

Code :
  1. $xmlConfig = domxml_open_file(dirname(__FILE__) . "/../helpers/nouvelles.xml" );
  2. $root = $xmlConfig->document_element();
  3. $child = $root->first_child();
  4. $xml = null;
  5. $xml1 = null;
  6. while ($child) {
  7. if ($child->node_type() != XML_TEXT_NODE) {
  8.  echo $child->tagname();
  9.  $xml .= $child->get_attribute("contenu" );
  10.  $xml1 .= $child->get_attribute("date1" );
  11. }
  12. $child = $child->next_sibling();
  13. }


 
Voici un bout du xml bidon que j'utilise comme il est simple à comprendre
 

Code :
  1. <?xml version="1.0"?>
  2. <nouvelles>
  3.     <nouvelle>
  4.         <contenu>toto</contenu>
  5.         <date1>10/10/2004</date1>
  6.     </nouvelle>
  7.     <nouvelle>
  8.         <contenu>Confirmant les tendances pessimistes, Monsieur et Madame X viennent de divorcer</contenu>
  9.         <date1>10/10/2005</date1>
  10.     </nouvelle> 
  11. </nouvelles>


 
Si quelqu'un pourrait m'aider j'ai rien trouvé d'intéressant sur le net et je galère pas mal
 
 :hello:  :hello:  :hello:

Reply

Marsh Posté le 10-08-2006 à 18:35:58   

Reply

Marsh Posté le 10-08-2006 à 18:53:39    

pas moyen de passer sous php5? simpleXml et le "vrai" DOM te simplifierait la vie!!!
 
Mais sinon dans ton code tu as une merdouille, tu fais des getAttribute pour récuperer des childNodes de ton noeud contenu!
Un attribut c'est ça:

Code :
  1. <nouvelle contenu="pouet"/>


Reply

Marsh Posté le 11-08-2006 à 09:10:13    

j'avais pu voir sur le net que c'était tout simple de faire ca en php5, mais la boite ou je suis ne veule pas changer de version sinon ca pèterai toutes leurs appli.
 
d'accord je vais réfléchir à ce que tu m'as dit, je te tiens au courant
 
 :hello:  :hello:

Reply

Marsh Posté le 11-08-2006 à 11:58:54    

salut  
 
j'ai réussi à dompter le domxml  :D  
 
voici mon code :

Code :
  1. if (!$dom = domxml_open_file(dirname(__FILE__) . "/../helpers/nouvelles.xml" )) {
  2.   echo "Error while parsing the document\n";
  3.   exit;
  4. }
  5. $root = $dom->document_element();
  6. $node_person = $root->get_elements_by_tagname("person" );
  7. $node_card = $root->get_elements_by_tagname("card" );
  8. $node_num = $root->get_elements_by_tagname("num" );
  9. $node_etat = $root->get_elements_by_tagname("etat" );
  10. $active = null;
  11. $i =0;
  12. $incre = 0;
  13. foreach ($node_person as $node=>$valeur) {
  14. echo "login"."     ".$valeur->get_attribute("login" )."   "."</br>";
  15. echo "cardId"."     ".$node_card[$node]->get_attribute("id" )."   "."</br>";
  16. for ($i=$incre;$i<count($node_num);$i++){
  17.  echo $node_num[$i]->get_attribute("id" )."   "."</br>";
  18.  echo $node_num[$i]->get_content()."   "."</br>";
  19.  if ($i == $incre+51 ){
  20.   break;
  21.  }
  22. echo "INSERT INTO `code` (`card_id` , `key_number` , `code` ) ('".$node_card[$node]->get_attribute("id" )."', '".$node_num[$i]->get_attribute("id" )."', '".$node_num[$i]->get_content()."')"."</br>";
  23. }
  24. $incre=$i+1;
  25. if ("oui" == $node_etat[$node]->get_attribute("used" )){
  26.  $active = 1;
  27. } else {
  28.  $active =0;
  29. }
  30. echo "INSERT INTO `card` (  `card_id` , `active` , `user_name` , `etat` )VALUES ('".$node_card[$node]->get_attribute("id" )."', '".$active."', '".$valeur->get_attribute("login" )."', '0')"."</br>";
  31. }
  32. echo "---<br />";


 
Je travaillai au début sur un fichier xml simple pour ne pas me tracasser avec, le code qui est là correspond à mon nouveau fichier xml de structure

Code :
  1. <Card>
  2. <person login="toto">
  3.  <card id="123">
  4.   <num id="1" >125</num>
  5.   <etat used="oui">52</etat>
  6.  </card>
  7. </person>
  8. </Card>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed