Bonjour,
j'ai besoin de réinjecter une partie de code sur une page joomla 2.5 au travres d'un petit code php qui réutilise un xml.

<?xml version="1.0" encoding="utf-8"?>
<categories>
  <category>
    <slug>SectionA</slug>
    <catlevel1>
      <slug>Niveau1A</slug>
      <catlevel2>
        <slug>Niveau2A</slug>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>Niveau1B</slug>
      <catlevel2>
        <slug>Niveau2A</slug>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>Niveau1C</slug>
      <catlevel2>
        <slug>Niveau2A</slug>
      </catlevel2>
      <catlevel2>
        <slug>Niveau2B</slug>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>Niveau1D</slug>
      <catlevel2>
        <slug>Niveau2A</slug>
      </catlevel2>
      <catlevel2>
        <slug>Niveau2B</slug>
      </catlevel2>
    </catlevel1>
  </category>
  <category>
    <slug>SectionB</slug>
    <catlevel1>
      <slug>Niveau1A</slug>
    </catlevel1>
    <catlevel1>
      <slug>Niveau1B</slug>
    </catlevel1>
  </category>
</categories>


Petit soucis est que je n'arrive pas à isoler mes catégories individuellement : Par exemple, j'ai besoin d'isoler la catégorie SectionA pour n'afficher que ses sous catégorie (Niveau1A , 1B, 1C, par exemple). Comment puis-je proceder?
J'utilise bien
$string=file_get_contents("arbo.xml");
$data = new SimpleXMLElement($string);
foreach ($data->category as $item){
echo "slug: " . $item->slug . "\n";
}

pour m'afficher mes catégories de premier niveau mais comment afficher les sous catégories d'une seule catégorie?
Merci.
Salut, voilà ce que tu peux faire, après à toi d'adapter la parie dans la boucle, car je suppose que ce n'est pas "exactement" le résultat escompté. Il n'y a pas de gestion d'erreur, ni de vérification spécifique, ce n'est qu'un exemple. J'utilise pour ma part DOMDocument.

$xml='<?xml version="1.0" encoding="utf-8"?>
<categories>
  <category>
    <slug>SectionA</slug>
    <catlevel1>
      <slug>Niveau1A</slug>
      <catlevel2>
        <slug>Niveau2A</slug>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>Niveau1B</slug>
      <catlevel2>
        <slug>Niveau2A</slug>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>Niveau1C</slug>
      <catlevel2>
        <slug>Niveau2A</slug>
      </catlevel2>
      <catlevel2>
        <slug>Niveau2B</slug>
      </catlevel2>
    </catlevel1>
    <catlevel1>
      <slug>Niveau1D</slug>
      <catlevel2>
        <slug>Niveau2A</slug>
      </catlevel2>
      <catlevel2>
        <slug>Niveau2B</slug>
      </catlevel2>
    </catlevel1>
  </category>
  <category>
    <slug>SectionB</slug>
    <catlevel1>
      <slug>Niveau1A</slug>
    </catlevel1>
    <catlevel1>
      <slug>Niveau1B</slug>
    </catlevel1>
  </category>
</categories>';

$doc = new DOMDocument();
$doc->loadXML($xml);

$xpath = new DOMXPath($doc);

$section = 'SectionA';
$query = "//categories/category/slug[text() = '$section']/..";

$category = $xpath->query($query);

$arrayCatlevel1 = $category->item(0)->getElementsByTagName('catlevel1');

foreach($arrayCatlevel1 as $catlevel1) {
	echo $catlevel1->getElementsByTagName('slug')->item(0)->nodeValue.'<br/>';
}


J'utilise XPATH afin de sélectionner le slug contenant la catégorie voulue, soit $section, puis je remonte d'un cran afin de sélectionner le noeud < category>. Une fois ça fait, c'est simple, il ne reste plus qu'à boucler sur les slugs de chacune des catégories enfants.