WampServer

Apache, PHP, MySQL on Windows 

 
  • Accueil forum
  • Retour à WampServer
  • presentation
  • Download
  • Addons
  • Formations
  • Alter Way

 
Voir le sujet: Précédent•Suivant
Aller à : Liste des Forums•Liste des messages•Nouvelle discussion•Recherche•Connexion•Imprimer la vue
récupération d’une variable php dans une expression xpath
Envoyé par: cayo (204.79.90.---)
Date: 21 September 2004 à 14:33

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 :

<?xml version="1.0" encoding="ISO-8859-1"?>
<offres_projet xmlns:xsi="[www.w3.org];
xsi:noNamespaceSchemaLocation="C:\wamp\www\php_projet\offres.xsd">
<projets id="01">
<nom>Mars</nom>
<code>XDZE</code>
<offre>
<chef>FON</chef>
<off_fonctionnelles type_offre="CRM"/>
</offre>
</projets>
<projets id="02">
<nom>Saturne</nom>
<code>AZER</code>
<offre>
<chef>PRO</chef>
<off_support type_offre="EAI"/>
</offre>
</projets>
<projets id=" ">
&#8230;.
</projets>
</offres_projet>

Le but du jeu est de récupérer l&#8217;ensemble des données relatives à tout
projet mettant en &#339;uvre un certain type d&#8217;offre, saisi dans un mini
formulaire :

<form name="offres" method="POST" action="<?php $PHP_self ?>">
<p>Offre fonction : <input type="text" size="30" maxlength="30"
name="TYPE_OFFRE"></p>
<br/>
<div align="center"><input type="submit" value="Valider"></div>

<?php
$TYPE_OFFRE=$_POST['TYPE_OFFRE']; // récupère les données du
formulaire

echo $TYPE_OFFRE."<br/>" ; //affiche l&#8217;offre
choisie ( c juste pour me rassurer&#8230winking smiley

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"winking smiley;

$xp = new domxpath($dom);
$nom =
$xp->query('child::projets[childeye popping smileyffre[child::*[@type_offre =
$TYPE_OFFRE]]]');

foreach ($nom as $node)
{
echo utf8_decode($node->textContent)."<br/>";
} // close foreach
} // close else

Ce que j&#8217;obtiens alors, en fonction des différentes écritures testées :

avec [@type_offre = $TYPE_OFFRE] ou [@type_offre = $_POST[TYPE_OFFRE]]
=> &#8220;xmlXPathEvalExpression: 3 object left on the stack in
c:\wamp\www\php_projet\domxpath6bis.php on line 24&#8221;

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&#8217;attribut,
j&#8217;ai exactement le résultat souhaité :
$nom = $xp->query('//projets[offre[* [@type_offre = "CRM"]]]');

J&#8217;ai l&#8217;impression en lisant le message d&#8217;alerte que mon expression n&#8217;est
pas fausse mais simplement incomplète, que ma requête est bien traitée
mais qu&#8217;il manque quelque chose pour renvoyer le résultat.
J&#8217;ai cherché dans différents tutoriaux des infos sur
xmlXPathEvalExpression mais cela ne m&#8217;a pas beaucoup avancée.
Si qqun a une piste&#8230;

Cayo

Options: Répondre•Citer ce Message
Re: récupération d&#8217;une variable php dans une expression xpath
Envoyé par: cayo (204.79.90.---)
Date: 24 September 2004 à 14:58

Bonjour,

Comme suggéré par Jérôme, décomposer la requête s'est avéré salvateur :

au lieu de balancer, en vain, directement :

$xp->query('//projets[offre[* [@type_offre = '$ TYPE_OFFRE']]]');

j'obtiens le résultat souhaité en faisant en deux étapes :

$chaine = "//projets[offre[* [@type_offre = '$TYPE_OFFRE']]]";
$nom = $xp->query($chaine);

NB ça marche également avec : [@type_offre = \"$TYPE_OFFRE\"]


Effectivement, les variables dans les expressions complexes, c pas tjs
ça !

Merci Merci !!

Cayo-Contente

Options: Répondre•Citer ce Message
Re: récupération d&#8217;une variable php dans une expression xpath
Envoyé par: Viper (---.adsl.proxad.net)
Date: 24 September 2004 à 17:12

Et bin voilà, Jérôme le sauveur a volé à ton secours, tu voies winking smiley

Options: Répondre•Citer ce Message


Aller à : Liste des Forums•Liste des messages•Recherche•Connexion
Désolé, seuls les utilisateurs connectés peuvent envoyer des messages dans ce forum.
Cliquer ici pour se connecter

design by jidePowered by Alter Way get firefoxget PHP