recuperer une valeur associer a une balise

Eléphant du PHP | 51 Messages

11 juil. 2007, 14:48

Bonjour
J'ai un fichier XSL et un XML
Dans mon fichier XML j'ai plusieurs balises avec un fichier lier et je voudrais récupérer ce lien
j'avais pensé faire de la manière suivante mais ce n'est pas la bonne valeur qui est récupérer

mon xml actuel

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1"?> <parametrage> <partenaires lib="PARTENAIRES"> <partenaire id="1"> <nom>Auchan</nom> <rep>Ins_Auch.xml</rep> </partenaire> <partenaire id="2"> <nom>Carrefour</nom> <rep>Ins_Car.xml</rep> </partenaire> <partenaire id="3"> <nom>Inter Marché</nom> <rep>Ins_Inter.xml</rep> </partenaire> </partenaires> <nflux lib="FLUX"> <flux id="4"> <nom>Flux1</nom> <rep>Ins_flux1.xml</rep> </flux> <flux id="5"> <nom>Flux2</nom> <rep>Ins_flux2.xml</rep> </flux> <flux id="6"> <nom>Flux3</nom> <rep>Ins_flux3.xml</rep> </flux> </nflux> </parametrage>
il récupère le 1er lien de fichier même si la 1er checkbox n'est pas sélectionner

une partie du xsl avec les checkbox

Code : Tout sélectionner

<form action="valider_para.php" method="POST"> <!--Sélection des paramétres--> <center><span class="h-stitre"><b>PARTENAIRES</b></span></center><br /> <center><table border="2" cellpadding="2" bordercolor="#0084BD"> <xsl:for-each select="parametrage/partenaires/partenaire"> <!--Affichage de la liste des partenaires--> <tr><td><input name="case[]" type="checkbox" value="{nom}"> <xsl:attribute name="id"><xsl:value-of select="nom"/></xsl:attribute> </input> <input name="lien[]" type="hidden" value="{rep}"> <xsl:attribute name="idlink"><xsl:value-of select="rep"/></xsl:attribute> </input> <span class="h-stitre"><b><xsl:value-of select="nom"/></b></span></td></tr> </xsl:for-each> </table></center> <br /><hr /><br /> <center><span class="h-stitre"><b>FLUX</b></span></center><br /> <center><table border="2" cellpadding="2" bordercolor="#0084BD"> <xsl:for-each select="parametrage/nflux/flux"> <!--Affichage de la liste des flux--> <tr><td><input name="case[]" type="checkbox" value="{nom}"> <xsl:attribute name="id"><xsl:value-of select="nom"/></xsl:attribute> </input> <input name="lien[]" type="hidden" value="{rep}"> <xsl:attribute name="idlink"><xsl:value-of select="rep"/></xsl:attribute> </input> <span class="h-stitre"><b><xsl:value-of select="nom"/></b></span></td></tr> </xsl:for-each> </table></center> <br /><hr /><br /> <!--Bouton de validation et d'annulation--> <center><input class="h-bout" style='cursor:pointer' this.style.cursor='pointer' type="submit" value="Valider"></input> <input class="h-bout" style='cursor:pointer' this.style.cursor='pointer' type="button" value="Annuler" onClick="javascript:location.href='install_ini.php';"/></center> </form>
le xml que j'avais écrit au départ

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1"?> <parametrage> <partenaires lib="PARTENAIRES"> <partenaire id="1" fic_install="Ins_Auch.xml"> <nom>Auchan</nom> </partenaire> <partenaire id="2" fic_install="Ins_Car.xml"> <nom>Carrefour</nom> </partenaire> <partenaire id="3" fic_install="Ins_Inter.xml"> <nom>Inter Marché</nom> </partenaire> </partenaires> <nflux lib="FLUX"> <flux id="4" fic_install="Ins_flux1.xml"> <nom>Flux1</nom> </flux> <flux id="5" fic_install="Ins_flux2.xml"> <nom>Flux2</nom> </flux> <flux id="6" fic_install="Ins_flux3.xml"> <nom>Flux3</nom> </flux> </nflux> </parametrage>
le problème c'est que la je n'arrive pas a récupérer le lien comment faire :(
Merci d'avance
Il y a ceux qui pensent, Il y a ceux qui croient et Il y a ceux qui doutent. Je pense que je crois que je doute. :-k
Image

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

11 juil. 2007, 17:13

Je pense qu'il faudrait que tu reformules ta question. Décrire ce que tu veux faire avec un fichier de démonstration de quelques lignes par exemple. Ton fichier actuel est très dense et contient du JS, du CSS, plein de trucs qui détournent l'attention en somme.

Donc, quel est ce lien que tu ne parviens pas à récupérer, qu'as-tu essayé, quel a été le résultat et en quoi le résultat obtenu diffère-t'il du résultat attendu ?

Eléphant du PHP | 51 Messages

11 juil. 2007, 17:27

Je voudrais récupérer dans cette ligne

<partenaire id="3" fic_install="Ins_Inter.xml">

avec la méthode que j'ai utilisé (vu que je n'y arrive pas avec la ligne ci-dessus)

si je sélectionne le partenaire carrefour et le flux3 j'ai a l'affichage

Carrefour
Ins_Auch.xml
Flux3
Ins_Car.xml

alors que je devrais avoir

Carrefour
Ins_Car.xml
Flux3
Ins_flux3.xml
Il y a ceux qui pensent, Il y a ceux qui croient et Il y a ceux qui doutent. Je pense que je crois que je doute. :-k
Image

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

11 juil. 2007, 17:57

Pour utiliser la valeur d'un attribut, il faut procéder comme pour un élément quelconque à la différence près que le nom de l'attribut est précédé d'un @. Pour résumer, imagine que l'attribut est un sous-élément et que son nom commence par @

Par exemple, pour afficher en XSL la valeur de l'attribut fic_install de l'élément dont "id=3" (prédicat utilisé entre crochets) on utilisera

Code : Tout sélectionner

<xsl:value-of select="//partenaire[@id=3]/@fic_install" />

Eléphant du PHP | 51 Messages

12 juil. 2007, 11:01

Merki je vais tester avec mais je ne peux pas précisais que c'est id 3 vu que mon code est dynamique je vais me débrouiller avec et si vraiment je ne trouve pas je te le dirais merci encore :wink:
ca fonctionne pour le reste mais dans ce cas la je n'arrive pas a recuperer la valeur de fic_install lié a ma balise nom

Code : Tout sélectionner

<xsl:for-each select="parametrage/partenaires/partenaire"> <!--Affichage de la liste des partenaires--> <tr><td><input name="case[]" type="checkbox" value="{nom}"> <xsl:attribute name="id"><xsl:value-of select="nom"/></xsl:attribute> <input name="lien" type="hidden" value="{partenaire/@fic_install}"> <xsl:value-of select="partenaire/@fic_install" /> </input> </input> <span class="h-stitre"><b><xsl:value-of select="nom"/></b></span></td></tr> /xsl:for-each>
code source de la page

Code : Tout sélectionner

<form action="valider_para(test).php" method="POST"> <center><span class="h-stitre"> <b>Partenaires</b> </span> </center> <br> <center> <table border="2" cellpadding="2" bordercolor="#0084BD"> <tr> <td> <input name="case[]" type="checkbox" value="Auchan" id="Auchan"> <input name="lien" type="hidden" value="" idlink=""> </input><span class="h-stitre"> <b>Auchan</b> </span> </td> </tr> <tr> <td> <input name="case[]" type="checkbox" value="Carrefour" id="Carrefour"> <input name="lien" type="hidden" value="" idlink=""> </input><span class="h-stitre"> <b>Carrefour</b> </span> </td> </tr> <tr> <td> <input name="case[]" type="checkbox" value="Inter Marché" id="Inter Marché"> <input name="lien" type="hidden" value="" idlink=""> </input><span class="h-stitre"> <b>Inter Marché</b> </span> </td> </tr> </table>
la valeur de ma balise input hidden idlink est vide alors qu'elle devrai avoir le lien Ins_Auch Ins_Car ...
Il y a ceux qui pensent, Il y a ceux qui croient et Il y a ceux qui doutent. Je pense que je crois que je doute. :-k
Image

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

12 juil. 2007, 18:31

Il y a quelques erreurs dans ton XSL : tes éléments <input> sont imbriqués, et ton XPath pour @fic_install n'est pas correct. Utilisant partenaire/@fic_install (attribut "fic_install" du sous-élément "partenaire") dans une boucle itérant sur parametrage/partenaires/partenaire correspond à parametrage/partenaires/partenaire/partenaire/@fic_install. Ce qu'il te faut, c'est sélectionner l'élément en cours. Pour cela on utilise . (un point) ou la fonction current(). Donc le bon XPath est ./@fic_install (attribut "fic_install" de l'élément en cours)

J'ai nettoyé ton code des trucs superflus pour tester, le résultat est
<?php

$xml = simplexml_load_string('<?xml version="1.0" encoding="ISO-8859-1"?>
<parametrage>
	<partenaires lib="PARTENAIRES">

		<partenaire id="1" fic_install="Ins_Auch.xml"> 
			<nom>Auchan</nom> 
		</partenaire> 

		<partenaire id="2" fic_install="Ins_Car.xml"> 
			<nom>Carrefour</nom> 
		</partenaire> 

		<partenaire id="3" fic_install="Ins_Inter.xml"> 
			<nom>Inter Marché</nom> 
		</partenaire> 

	</partenaires>
</parametrage>');

$xslt = new XSLTProcessor;
$xslt->importStylesheet(simplexml_load_string('<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

	<xsl:template match="/">

		<xsl:for-each select="/parametrage/partenaires/partenaire">

			<input name="case[]" type="checkbox" id="{nom}" value="{nom}" />
			<input name="lien" type="hidden" value="{./@fic_install}" />

		</xsl:for-each>

	</xsl:template>

</xsl:stylesheet>'));

echo $xslt->transformToXML($xml);
Les autres changements que j'ai apporté : le XPath dans ta boucle for-each, qui devient absolu. De cette façon, peu importe où tu copies/colles ta boucle, tu accèdes toujours à l'élément racine, parce que ton expression commence par /

J'ai également remplacé les xsl:value-of par des valeurs "en ligne", plus rapides à taper et à lire.

Eléphant du PHP | 51 Messages

13 juil. 2007, 10:49

Merci beaucoup ca ma bien aider il ne me reste qu’une erreur à corriger avec le lien en fonction de la sélection
Je n’ai pas eu besoin de la fonction current()
Merci de ton aide précieuse Image
Il y a ceux qui pensent, Il y a ceux qui croient et Il y a ceux qui doutent. Je pense que je crois que je doute. :-k
Image