Bonjour, Je ne suis pas sûre que cela soit réalisable, mais je souhaite extraire des données d’un fichier xml à partir d’une expression xpath conditionnée par une valeur saisie dans un formulaire. Le fichier xml est organisé selon cette arborescence :
Le but du jeu est de récupérer l’ensemble des données relatives à tout projet mettant en œuvre un certain type d’offre, saisi dans un mini formulaire :
<?php $TYPE_OFFRE=$_POST['TYPE_OFFRE']; // récupère les données du formulaire
echo $TYPE_OFFRE."<br/>" ; //affiche l’offre choisie ( c juste pour me rassurer…
if (!isset ($TYPE_OFFRE)) { // message d'accueil au chargement de la page echo "saississez l'offre recherchée"; } else { $dom = new DomDocument (); $dom->load("offres.xml"
$xp = new domxpath($dom); $nom = $xp->query('child::projets[childffre[child::*[@type_offre = $TYPE_OFFRE]]]');
foreach ($nom as $node) { echo utf8_decode($node->textContent)."<br/>"; } // close foreach } // close else
Ce que j’obtiens alors, en fonction des différentes écritures testées :
avec [@type_offre = $TYPE_OFFRE] ou [@type_offre = $_POST[TYPE_OFFRE]] => “xmlXPathEvalExpression: 3 object left on the stack in c:\wamp\www\php_projet\domxpath6bis.php on line 24”
avec [@type_offre = \'$TYPE_OFFRE\'] ou [@type_offre = \'$_POST[TYPE_OFFRE]\'] => pas de message d'alerte, affiche bien le type d'offre, mais c tout (renvoie une chaîne de caractères vides ?).
Une précision, lorsque je saisis directement la valeur de l’attribut, j’ai exactement le résultat souhaité : $nom = $xp->query('//projets[offre[* [@type_offre = "CRM"]]]');
J’ai l’impression en lisant le message d’alerte que mon expression n’est pas fausse mais simplement incomplète, que ma requête est bien traitée mais qu’il manque quelque chose pour renvoyer le résultat. J’ai cherché dans différents tutoriaux des infos sur xmlXPathEvalExpression mais cela ne m’a pas beaucoup avancée. Si qqun a une piste…