bonjour a tous et toutes
continuant mon petit bonhomme de chemin sur la voie sacrée de XML/XSL, je suis de nouveau confronter à un probleme....existentiel !!
je m'explique...
je dispopse d'un fichier XML qui ressemble à ceci:

<bibliotheque>

<livre>
	<titre>Le pêcheur</titre>
	<auteur>	
		<nom>Simak</nom>
		<prenom>Clifford D.</prenom>
	</auteur>
	<titre-original>Time is the simplest thing</titre-original>
	<annee>1961</annee>
	<editeur>J'ai Lu</editeur>
	<ISBN>6438-5</ISBN>
	<resume>Finalement, les fusées étaient trop lentes...</resume>
	<genre>SF</genre>
</livre>

<livre>
		<titre>La demoiselle aux yeux verts</titre>
		<auteur>	
			<nom>Leblanc</nom>
			<prenom>Maurice</prenom>
		</auteur>
		<annee>1967</annee>
		<editeur>Le livre de poche</editeur>
		<ISBN>6292-5</ISBN>
		<resume>Une aventure d'Arsène Lupin...</resume>
		<genre>Policier</genre>
	</livre>
etc...


je dispose d'une feuille XSL pour les transformations dans laquelle je récupère un parametre issu d'un fichier PHP d'appel...
jusque la pas de souci !
j'aimerais pouvoir afficher uniquement 1 élément <livre> de mon fichier XML en fonction du parametre récupéré (en l'occurence le code ISBN)

cela parait simple mais je n'y arrive pas...
si quelqu'un à une idée et qu'il veut bien la partager ????

merci d'avance.

Quatre
Modifié par Quatre (23 Apr 2007 - 21:57)
Personellement, je mettrais un attribut id à chaque livre : <livre id="1">...
Pour ensuite :

<xsl:for-each select="bibliotheque/livre[id='.$this->get['id'].']">
Titre : <xsl:value-of select="titre"/>
Auteur :<xsl:value-of select="auteur/prenom"/> <xsl:value-of select="auteur/nom"/>
</xsl:for-each>


Ayant une page pour chaque artiste et albums sur mon site, c'est ainsi que je procède.

Petite question : c'est pour un cours de fac ou test personnel ?
bonjour
je trouve ridicule de remettre un id pour chaque livre étant donné que je dispose déja d'un élément de référence unique (le code ISBN) mais ne peut on pas adapter ton code pour vérifier l'élément plutot qu'un attribut???

quand à ta question, c'est un peu des 2 !! bien que j'ai passer l'age d'être en fac !!


Quatre
Modérateur
Salut,

Tu peux passer par une clé Smiley smile

Exemple:

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="livres2.xsl"?>

<livres>
	<livre>
		<auteur>Steven Holner</auteur>
		<titre>XSLT par la pratique</titre>
		<annee>2002</annee>
		<editeur>Eyrolles</editeur>
		<genre>Programmation</genre>
		<ISBN>2-212-11040-5</ISBN>
	</livre>
	<livre>
		<auteur>Kate Mosse</auteur>
		<titre>Labyrinthe</titre>
		<annee>2006</annee>
		<editeur>JC Lattès</editeur>
		<genre>Roman</genre>
		<ISBN>2-7096-2583-0</ISBN>
	</livre>
	<livre>
		<auteur>Jack Vance</auteur>
		<titre>Emphyrio &#038; autres aventures</titre>
		<annee>2004</annee>
		<editeur>DENOEL</editeur>
		<genre>Science Fiction</genre>
		<ISBN>2.207.25429.1</ISBN>
	</livre>
</livres>


<?xml version="1.0" encoding="utf-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

	<xsl:output
		method="xml"
		version="1.0"
		encoding="utf-8"
		omit-xml-declaration="yes"
		doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
		doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
		indent="yes"/>


	<xsl:param name="param"/>
	<xsl:key name="code" match="livre" use="ISBN"/>


	<xsl:template match="livres">
		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
			<head>
				<meta http-equiv="content-type" content="text/html; charset=utf-8" />
				<title>Exemple</title>
			</head>
			<body>
				<xsl:apply-templates select="key('code', $param)"/>
			</body>
		</html>
	</xsl:template>


	<xsl:template match="livre">
		<ul xmlns="http://www.w3.org/1999/xhtml">
			<xsl:apply-templates select="node()"/>
		</ul>
	</xsl:template>


	<xsl:template match="*">
		<li xmlns="http://www.w3.org/1999/xhtml"><xsl:value-of select="."/></li>
	</xsl:template>


</xsl:stylesheet>

Modifié par koala64 (24 Apr 2007 - 09:11)
Modérateur
Tu peux aussi passer par la méthode contains(). Smiley cligne

<?xml version="1.0" encoding="utf-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

	<xsl:output
		method="xml"
		version="1.0"
		encoding="utf-8"
		omit-xml-declaration="yes"
		doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
		doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
		indent="yes"/>


	<xsl:param name="param"/>


	<xsl:template match="livres">
		<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
			<head>
				<meta http-equiv="content-type" content="text/html; charset=utf-8" />
				<title>Exemple</title>
			</head>
			<body>
				<xsl:apply-templates select="//*[contains(ISBN, $param)]"/>
			</body>
		</html>
	</xsl:template>


	<xsl:template match="livre">
		<ul xmlns="http://www.w3.org/1999/xhtml">
			<xsl:apply-templates select="node()"/>
		</ul>
	</xsl:template>


	<xsl:template match="*">
		<li xmlns="http://www.w3.org/1999/xhtml"><xsl:value-of select="."/></li>
	</xsl:template>

</xsl:stylesheet>
bonjour a tous et toutes
j'avais oublier de mettre un "Résolu" mais en fait j'ai bien fais...
j'applique 2 fois la méthode avec 'contains' pour obtenir 2 affichage différents ( completement différents, contenu et présentation)
mais en effectuant un

<xsl:apply-templates select="//*[contains(ISBN, $param)]"/>

on appelle

<xsl:template match="*">

		<li xmlns="http://www.w3.org/1999/xhtml"><xsl:value-of select="."/></li>

	</xsl:template>

et quand j'effectue mon second choix , j'obtiens la meme presentation car j'appelle le meme code 'template match "*"

comment faire pour différencier les 2???

merci d'avance

Quatre