Bonjour à tous et à toutes

Voila j'ai un petit soucis

J'ai un document xml contenant des produits, et j'aimerai le parcourir, et récupérer éléments.
Voici une partie du document XML :
Code :

      <produits>
          <produit ref="p1" categorie="Boissons">
              <nom>Chai</nom>
              <qte>10 boîtes x 20 sacs</qte>
              <prix>9</prix>
              <stock>39</stock>
              <reappro>10</reappro>
          </produit>
          ... 


Pour parcourir ce document xml, j'utilise donc un parseur DOM. Les éléments que je doit extraire sont :
- Les attributs du produit
- Le nom du produit
- Le prix du produit (aprés je pourrai varier)

Voici mon document php pour l'instant
Code :


$doc_xml = new DOMDocument('1.0', 'UTF-8');
$doc_xml->load('produits.xml'); // charge le fichier
$racine = $doc_xml->documentElement;
$produit = $racine->getElementsByTagName('produit'); // Pour tous les élements produit, on affiche les attributs
foreach($produit as $noeud)
{
          $ref = $noeud->getAttributeNode('ref');
          $cat = $noeud->getAttributeNode('categorie');
          afficherInfos($ref, $cat);
}

      function afficherInfos($r, $c)
      {
          $ref = $r->nodeValue;
          $cat = $c->nodeValue;
          echo '<tr>';
          echo '<td>' . $ref . '</td><td>' . $cat . '</td>';
          echo '</tr>';
      } 


Pour l'instant y'a pas de problème, mais maintenant, je n'arrive pas, enfin j'ai pas réussi, à décendre dans l'arbre et à afficher le nom de l'élément.

J'ai essayé avec un getElementsByTagName('nom'), mais j'ai du mal m'y prendre

Si vous avez des idées, merci de m'en faire part Smiley smile
Salut,

Passe à XSL, tu seras gagnant. Smiley biggrin
Ton html ne sera plus compris dans Php.
Tu sépares le contenu de l'affichage.

A+
Modifié par sylvain38 (11 Jun 2006 - 18:56)
Je connais trés bien XSL, et j'ai déja réussir à le faire, mais si on fait toujours au plus simple, le compliqué nous bloquera bien plus vite Smiley smile

J'ai également réussi avec un parseur Sax, mais la, je veux le faire avec DOM Smiley smile
On peut faire comme ça : Smiley smile
<?php

$doc_xml = new DOMDocument('1.0', 'UTF-8');
$doc_xml->load('produits.xml'); // charge le fichier
$racine = $doc_xml->documentElement;


$produits = array();

// Pour chaque <produit>
foreach($racine->getElementsByTagname('produit') as $produitElement) {

    // Infos de bases en attributs
    $produit = array(
        'ref' => $produitElement->getAttribute('ref')
      , 'cat' => $produitElement->getAttribute('categorie'));


    // Pour chaque élément dans <produit>
    foreach($produitElement->childNodes as $child) {

        /* Si c'est un DOMElement :
         * La propriété childNodes renvoi tout. Ca veut dire que même les espaces
         * blancs entre les éléments sont renvoyés sous forme de DOMText
         */

        if($child->nodeType == XML_ELEMENT_NODE) {

            /* On récupère le nom de la balise comme clé. La propriété textContent
             * renvoi le contenu de la balise
             */
            $produit [$child->tagName] = $child->textContent;
        }
    }
    $produits [] = $produit;

}
afficherInfos($produits);


function afficherInfos($produits) {

    echo '<table><tbody>';
    foreach($produits as $p) {

        echo '<tr><td>' . $p['ref'] . '</td>'
           . '<td>' . $p['cat'] . '</td>'
           . '<td>' . $p['nom'] . '</td>'
           . '<td>' . $p['qte'] . '</td>'
           . '<td>' . $p['prix'] . '</td>'
           . '<td>' . $p['stock'] . '</td>'
           . '<td>' . $p['reappro'] . '</td></tr>';
    }
    echo '</tbody></table>';
}

Hésite pas si t'as des questions