DOM, extraction d'information dans un fichier XML

DOM, extraction d'information dans un fichier XML - PHP - Programmation

Marsh Posté le 23-03-2006 à 16:30:30    

Bonjour,
 
J'utilise php 5.1.2; d'aprés le site PHP.net les fonctions comme domxml_open_file($file) ne sont plus incluses dans la version 5 (effectivement ca ne compile pas ...).  
Si j'ai bien compris le module DOM XML est remplacé par DOM tout court et il faut utiliser des fonctions orientées objet et ne plus utiliser les fonctions procédurales.  
 
J'ai essayé comme ceci :
 
$dom = new DOMDocument(); // avant je faisais DomDocument() ...
$dom->load($filename); // egal à $dom->loadXML(file($filename))  
 
$params = $dom->getElementsByTagName("*" );
 
foreach ($params as $param) {
  echo $param -> getAttribute('attr').'<br/>';
}
 
mais il ne rentre pas dans la boucle ... Normalement le string "*" devrait me permettre d'obtenir une liste de tous les noeuds de mon fichier.
La fonction getElementsByTagName me renvoit un objet qui devrait etre une liste de DOMNode (comment puis-je le vérifier?)
Toutes les suggestions sont les bienvenues.

Reply

Marsh Posté le 23-03-2006 à 16:30:30   

Reply

Marsh Posté le 23-03-2006 à 17:00:23    

Je viens d'essayer avec simplexml mais je n'y arrive toujours pas. PHP c'est vraiment un milliard de module pour faire la meme chose et ça ne marche pas.
 
$xml = simplexml_load_file($address);
 
foreach ($xml->user as $u) {
   echo $u->nom, '<br />';
}

Reply

Marsh Posté le 23-03-2006 à 17:25:53    

ton exemple avec dom est correct ( remarque c'est aussi celui de la doc :o ), par exemple:

Code :
  1. <?php
  2. $xml =<<<EOT
  3. <?xml version="1.0"?>
  4. <config>
  5.   <section id="section1">
  6.    <param name="param1">value1</param>
  7.    <param name="param2">value2</param>
  8.   </section>
  9.   <section id="section2">
  10.    <param name="param3">value3</param>
  11.   </section>
  12. </config>
  13. EOT;
  14. $dom = new DOMDocument("1.0" );
  15. $dom->preserveWhiteSpace = FALSE;
  16. $dom->loadXML($xml);
  17. $params = $dom->getElementsByTagName('param');
  18. foreach ($params as $param) {
  19.   echo $param->getAttribute('name')."\n";
  20. }
  21. ?>


produit bien

Code :
  1. param1
  2. param2
  3. param3


Es tu sur de ton flux xml?
 
Par ailleurs getElementsByTagName retourne une DOMNodeList.
Tu peux avoir sa taille grace à la propriété length:

Code :
  1. echo $params->length


Et si tu souhaites vraiment avoir son type la fonction gettype est la pour ça!

Reply

Sujets relatifs:

Leave a Replay

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