Bonjour a tous.
je viens de débuter en xml/xsl car je voudrai changer le system de news de mon site qui utilise un interpreter php et un fichier text. Mais comme le php n'est pas dispo sur tout les serveurs de FAI (tlm n'est pas free !), je change donc pour un system plus compatible et souple.

Mon fichier xml et xsl fonctionnent tres bien pour ce qui est du texte. Mais j'aimerai aussi afficher des images et la je ne sais pas comment faire ^^'
Le mieux ce serait d'arriver a faire le meme systeme que celui actuel avec le php ou l'interpreter rempace automatiquement les ":)" par "smiley.gif", ";)" par "wink.gif" etc...

Est-ce possible ou j'en demande trop ? dans un premier temps si qq'un pouvais deja me montrer comment afficher une simple image, ce serait deja beaucoup Smiley smile merci d'avance !
Modifié par Akeela (29 Jul 2007 - 00:28)
Bon et bien après quelques recherches et essais (des milliers en fait...) j'ai créer l'aspirateur qui...euh..non c'est pas ça Smiley langue Ce que je voulais dire c'est que j'ai réussi à affiché une image en faisant de cette façon :

dans le fichier xml :
<pix>smiley.gif</pix>
dans le fichier xsl :
			<xsl:element name="img">
				<xsl:attribute name="src">
					<xsl:value-of select="pix"/>
				</xsl:attribute>
				<xsl:attribute name="align">
					<xsl:value-of select="absmiddle"/>
				</xsl:attribute>
				<xsl:attribute name="width">
					<xsl:value-of select="15"/>
				</xsl:attribute>
				<xsl:attribute name="height">
					<xsl:value-of select="15"/>
				</xsl:attribute>
			</xsl:element>

Et ça marche donc, mais je ne peux pas mettre l'image a l'interieur d'une autre balise, je m'explique en exemples : dans le fichier xml
<description>texttexttexttexttexttext<pix>smiley.gif</pix></description>

la ça ne marche pas, il me met le nom de l'image en text mais si je sort la balise :
<description>texttexttexttexttexttext</description><pix>smiley.gif</pix>

la ça marche. Un peu frustrant si je veux illustrer mon texte pour l'instant je peut mettre une image qu'a la fin ou au debut et pas au milieu Smiley decu
Donc voila, j'espere que qq'un peut me venir en aide pour me debloquer, merci d'avance Smiley cligne
Modifié par Akeela (08 Apr 2006 - 19:04)
Bonjour Akeela

Sans avoir une vision complète de tes fichiers XML source, XSLT, et html destination, il est difficile de te donner le pan de code qui te manque.

Je te rassure il légitime et simple de cibler un élément XML quelle que soit sa position dans l'arbre. Cela se fait avec une expression Xpath adaptée.

A tout hasard essaye :
<xsl:value-of select="//description/pix"/>
Merci pour votre acceuil et désoler pour l'oubli de balise code Smiley confused

Pour te répondre Xavier voici mon ébauche de code au compet :
fichier xml (news.xml)

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="news.xsl"?>
<site_news>
<news id="n001">
	<date>
		<day>05</day>
		<month>04</month>
		<year>2006</year>
	</date>
		<from>Akeela</from>
		<description>
		Aujourd'hui c'est jour de promo ! De la musique electro mixé par
		un pote à télécharger sans vergogne ^^ Low Electronics !
		J'espère que vous aimerez <pix>../../pics/smiles/smiley.gif</pix>
		</description>
		
</news>
<news id="n002">
	<date>
		<day>31</day>
		<month>04</month>
		<year>2006</year>
	</date>
		<from>Akeela</from>
		<description>
		Pour ce remettre de cette absence, une nouvelle page de jeux dans la Salle de Jeux. Enjoy ! <pix>../../pics/smiles/laught.gif</pix>
		</description>
</news>
</site_news>

fichier xslt (news.xsl)

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
  <xsl:template match="/">

<html>
	<head>
  <title>Akeela.net News</title>
     <style type="text/css">
		<![CDATA[
        body {font-family:Arial,helvetica,sans-serif;
  				text-align:center;
				color:#ffffff;
				font-size:13px;
				background-color:#2766ab}
		span {font-weight:bold; color:#ffffff}
        ]]>
	  </style>
	</head>
  <body>
    <xsl:for-each select="site_news/news">
      <div style="padding:4px">
        <span>
        le <xsl:value-of select="date/day"/>/<xsl:value-of select="date/month"/>/<xsl:value-of select="date/year"/></span>
        par <xsl:value-of select="from"/>
      </div>

      <div style="margin-left:20px; margin-bottom:1em; font-size:10pt">
        <xsl:value-of select="description"/>
			<xsl:element name="img">
				<xsl:attribute name="src">
					<xsl:value-of select="pix"/>
				</xsl:attribute>
				<xsl:attribute name="align">
					<xsl:value-of select="absmiddle"/>
				</xsl:attribute>
				<xsl:attribute name="width">
					<xsl:value-of select="15"/>
				</xsl:attribute>
				<xsl:attribute name="height">
					<xsl:value-of select="15"/>
				</xsl:attribute>
			</xsl:element>
      </div>
    </xsl:for-each>
  </body>
</html>
</xsl:template>
</xsl:stylesheet>

pour le fichier html, j'appel juste mon fichier xml dans une iframe :

<iframe id="news" name="news" src="xml/news.xml" width="466" height="115" scrolling="auto" frameborder="0"></iframe>

Voila, sinon j'ai essayer ce que tu m'a montrer Xavier et ça ne marche pas, il me met tjs le nom de l'image en text. Mais je garde confiance, il n'y a pas de probleme sans solution ou alors c'est que le probleme a été mal posé (A.Einstein) Smiley ravi
Perso j'ai comme toi mis l'adresse de me images dans un xml et voilà comment je fais pour les afficher :

<img src="{site_news/news[@id=n001]/description/pix}"></img>


Mets ca dans ton xsl, par contre, vérifie bien que le lien de ton fichier image.
Si tu fais un "xsl:value-of select", c'est logique qu'il te donne le texte entre tes balises.

J'espere que c'est bon @+
Merci Bellami pour ta proposition qui fonctionne mais toujours pas comme je le voudrais. Je pense que mon soucis viens de ma définition dans le fichier xslt.
Car comme je l'avair précisé dans un autre post, le problème viens du fait que ma balise <pix> ce trouve a l'interieur de ma balise <description>. Avec les fichiers tel que vous les voyez dans mon autre post et en testant ce que m'a donné Bellami, il me rajoute l'image après la balise de fermeture </description> et ce meme si ma balise <pix> est a l'interieur de cette derniere. Resultat final, je me retrouve avec mon image smiley.gif qui ce repete à la fin de chaque </description> tout en ayant quand meme le nom de mes images écrit en texte a l'interieur de <description>. Un soucis persiste...
Bon après plusieurs essais j'ai décidé de réecrire le code de mon fichier xsl en une forme plus pratique pour moi et aussi agrémenté mon fichier xml de plusieurs images histoire de tester. Donc je remet les codes comme ils sont actuellement.
Fichier xml :
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="news.xsl"?>
<!DOCTYPE site_news SYSTEM "news.dtd">
<site_news>
	<news id="n001">
		<date>
			<day>05</day>
			<month>04</month>
			<year>2006</year>
		</date>
		<from>Akeela</from>
		<description>
		Aujourd'hui c'est jour de promo ! De la musique electro mixé par
		un pote à télécharger sans vergogne <pix id="grin">../../pics/smiles/grin.gif</pix> Low Electronics !
		J'espère que vous aimerez <pix id="smiley">../../pics/smiles/smiley.gif</pix>
		</description>
		
	</news>
	<news id="n002">
		<date>
			<day>31</day>
			<month>03</month>
			<year>2006</year>
		</date>
		<from>Akeela</from>
		<description>
		Pour ce remettre de cette absence, une nouvelle page de jeux
		 dans la Salle de Jeux. Enjoy ! <pix id="laught">../../pics/smiles/laught.gif</pix>
		</description>
	</news>
</site_news>

Fichier xsl :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
  <xsl:template match="/">

<html>
	<head>
  <title>Akeela.net News</title>
     <style type="text/css">
		<![CDATA[
        body { font-family:Arial,helvetica,sans-serif;
  				text-align:center;
				color:#ffffff;
				font-size:13px;
				background-color:#2766ab }
		span { font-weight:bold }
		hr { width:150px; height:1px; color:#ffffff }
        ]]>
	  </style>
	</head>
	<body>
		<xsl:apply-templates />
	</body>
</html>
</xsl:template>

<xsl:template match="site_news/news[@*]">
<p>
	<xsl:apply-templates /><br /><hr />
</p>
</xsl:template>

<xsl:template match="date">
le <span>
	<xsl:value-of select="day"/>/<xsl:value-of select="month"/>/<xsl:value-of select="year"/></span>
</xsl:template>

<xsl:template match="from">
 par <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="description">
<p>
  <xsl:value-of select="."/>
  <img><xsl:attribute name="src"><xsl:value-of select="pix[@*]" /></xsl:attribute>
	<xsl:attribute name="align"><xsl:value-of select="absmiddle" /></xsl:attribute></img>
</p>
</xsl:template>

</xsl:stylesheet>

Avec les fichiers écrit comme cela voila le résultat :
www.akeela.net/pics/xml_test.jpg
Toujours le même problème, il me rajoute l'image dont l'adresse ce trouve dans les balises <pix> après le </description> tout en me les laissant en text aussi. Si quelqu'un peu m'éclairer parce que la je pige pas Smiley ravi
Merci d'avance Smiley cligne
C'est simple, dans ton xsl tu as :
<xsl:template match="description">
<p>
<xsl:value-of select="."/>


Donc, tu demande d'afficher tout ce qui est contenu entre les balises "description", et comme ta balise "pix" est situé dans ta balise "description" elle est également affichée, et donc ton adresse apparait.

Le mieux, serait de placer ta balise "pix" après ton "</description"> dans le xml; ou alors ajouté un attribut à ta balise description du genre :

<description smiley="laught.gif"'>
Oui je m'était déjà rendu compte qu'en sortant la balise <pix> de <description> cela fonctionnait normalement. Mais l'interet d'intégrer des images (en l'occurence des smileys) c'est bien pour agrémenter mon texte et ce n'importe où dans le texte. J'ai bien chercher sur le net et a chaque fois l'exemple que je trouve montre que l'image est en dehors du texte. A croire que c'est impossible autrement...
a écrit :
A croire que c'est impossible autrement
Non, en fait il est impossible que ce soit impossible. Mais je crois qu'il faut éviter les solutions toutes faites et découvrir un peu plus précisément XSLT.

Si je me concentre uniquement sur la question posée, remplace simplement ton template ciblant l'élément description par :
<xsl:template match="description">
   <p><xsl:apply-templates select="pix | text()"/></p>
</xsl:template>

<xsl:template match="text()">
  <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="pix">
  <img><xsl:attribute name="src"><xsl:value-of select="." /></xsl:attribute></img>
</xsl:template>
Merci beaucoup Xavier ça marche impeccable Smiley biggrin
Mais quand je disais
a écrit :
A croire que c'est impossible autrement
c'était juste l'impression que l'on pouvais avoir, en aucun cas ça voulais dire que je baissais les bras Smiley cligne En tout cas tu as raison, je vais éviter les solutions préformatés et étudier plus à fond par moi-même. En ce qui concerne ce problème, pour moi c'est résolu.
Bonjour,

j'aimerais faire a peu près la même chose, sauf que je n'ai jamais fait de xml, je découvre ça et les possibilités m'ont l'air infinies.
Modifié par Cyr007 (19 Apr 2006 - 09:12)
N'y arrivant pas , j'ai créé le fichier qui m'interesse:

je dois aller chercher dans le xml les données qui me servent à remplir un tableau

code xml:

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="base.xsl" alternate="yes"?>
<logiciels>
	<logiciel>
		<nom_log>Wo-FACTURES</nom_log>
		<version_log>Version</version_log>
		<date_log></date_log>
		<tarif_log ></tarif_log>
		<descriptiongen_log>
		Gestion commerciale, facturation, CRM,... 
		</descriptiongen_log>
		<description_log>
		Gestion des contrats, gestion du stock, suivi des techniciens, planning d’interventions.
		Devis, travaux supplémentaires, facturation, facturation période automatique. 
		</description_log>		
		<profil_log> Facturation généraliste</profil_log>
		<profil_log> Entreprises de SAV, chauffage - climatisation, ... </profil_log>
		<demo_log namescapce="http://barbier.projet.iut.free.fr">version d'évaluation</demo_log>
		<image_log>images/logo_wosav_clim.jpg</image_log>
	</logiciel>
	<logiciel>
		<nom_log>Wo-PLANNING </nom_log>
		<version_log>Version</version_log>
		<date_log></date_log>
		<tarif_log ></tarif_log>
		<descriptiongen_log>
		Planning techniciens et multi-services.
		</descriptiongen_log>
		<description_log>
		Planning graphique, Installations, entretiens, dépannages, travaux supplémentaires. Fiches d’interventions, récapitulatif hebdomadaire et mensuel. Agenda, pointage, gestion des bons de passage 
		</description_log>
		<profil_log>Planification, gestion des rendez-vous</profil_log>
		<profil_log>Entreprises de SAV, chauffage - climatisation, ... </profil_log>
		<profil_log>Entreprises de propretés, ... </profil_log>
		<description_nouv_log>nouveautés</description_nouv_log>
		<demo_log>version d'évaluation</demo_log>
		<image_log>image</image_log>
	</logiciel>
	<logiciel>
		<nom_log>Wo-COMPTA</nom_log>
		<version_log>Version 9.16</version_log>
		<date_log></date_log>
		<profil_log>Comptables</profil_log>
		<profil_log>Entreprises de SAV, chauffage - climatisation, ... </profil_log>
		<profil_log>Entreprises de propretés, 3D, .. </profil_log>
		<profil_log>Magasins, point de vente en téléphonie.</profil_log>
		<profil_log>Hôtellerie, tourisme, centre de vacances</profil_log>
		<profil_log>Agences Immobilières, SCI, Syndics, gestionnaires de biens privés .. </profil_log>
		<descriptiongen_log>
		Logiciel de comptabilité générale, analytique et budgétaire. 
		</descriptiongen_log>
		<description_log>
		Solution intégrée de comptabilité dotée de nombreux assistants qui permet de multiplier par deux la rapidité de saisie en limitant les risques d’erreur.
		Base documentaire de l'ensemble des pièces comptables (factures, justificatifs, bulletins de salaire, contrats de travail, etc…), Bilan, Compte de résultat, Soldes intermédiaires de gestion ; Balances, Grand Livre,etc.
		</description_log>
		<profil_log>infos détaillées</profil_log>
		<demo_log>version d'évaluation</demo_log>
		<image_log>image</image_log>
	</logiciel>
</logiciels>


code xsl:
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" version="html4.01" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN" /> 
<xsl:template match="/">
	<html>
		<head>
		<title>Liste des logiciels</title>
		</head>
		 <body>		 
				  <h1>Les logiciels</h1> 				   	
				
				<table width="100%" border="1">
					<xsl:for-each select="logiciels/logiciel">
						  <tr> 
								<td width="25%" rowspan="5" valign="top"><div align="center"></div>
								  <div align="center"><xsl:attribute name="style"><xsl:value-of select="image_log" /></xsl:attribute></div></td>
								<td height="30" colspan="4" valign="top"><xsl:value-of select="nom_log/text()" /></td>
						  </tr>
						  <tr> 
								<td height="30" colspan="4" valign="top"><xsl:value-of select="descriptiongen_log" /></td>
						  </tr>
						  <tr>
						  		<td height="24" colspan="4" valign="top"><xsl:value-of select="description_log" /></td>		
						  </tr>
						  <tr> 
						  		<!--Tout ce qui concerne le profil fonctionne correctement-->							  
								<td width="10%" height="53" valign="top"><div align="center">Profils :</div></td>
								<td colspan="3" valign="top"><ul>
								<xsl:for-each select="profil_log">									
									<li>
 									<xsl:value-of select="." /> 
  									</li>
								</xsl:for-each>
								</ul></td>
						  </tr>
						  <tr class="TableEntete"> 
								<td height="24" width="10%"><div align="center">Plaquettes</div></td>
								<td width="10%"><div align="center">Tarifs</div></td>
								<td width="40%"><div align="center">Demonstration</div></td>
								<td width="15%"><div align="center">Mise à jour</div></td>
						  </tr>
						  <tr> 
								<td width="25%" valign="top"><div align="center"><xsl:value-of select="version_log/text()" /></div></td>
								<td height="24" valign="top"><div align="center">PDF</div></td>
								<td><div align="center">Tarifs</div></td>
								<td><div align="center">Version d'évaluation</div></td>
								<td><div align="center">fiche maj</div></td>
						  </tr>
					 </xsl:for-each>
				</table>
		</body>
	</html>
</xsl:template>
</xsl:stylesheet>



j'aurais besoin de pouvoir afficher des liens vers des fichiers exterieurs (.pdf ou .exe), aussi des liens vers d'autres pages, donc je pense que je doit mettre un attribut namespace, ou autre, je n'ai pas trop d'idée la dessus.

J'aurais aussi besoin du meme processus afin de recuperer une image et la mettre dans le tableau.

Comment je pourrais faire?
mise de l'adresse dans le tableau, le xml va chercher l'adresse?
je n'en ai aucune idée.

ce que j'ai fait ne fonctionne pas pour les liens et les images.

Autre chose: le tableau se lit très bien avec IE, mais pas du tout avec FF:
http://barbier.projet.iut.free.fr/stage/www.acesoftware.fr/index3.htm
Modifié par Cyr007 (18 Apr 2006 - 17:45)
Après quelques heures de recherche, j'ai trouvé la solution.

Je vais la mettre ici si qqn a un jour le même problème que moi:

pour les liens:

a écrit :
<a href='{demo_log}' target="_blank">Version d'évaluation</a>


la feuille xml va aller chercher dans la balise demo_log l'adresse du lien :

exemple:

a écrit :

<demo_log>http://www.google.fr</demo_log>


le target="_blanck" signifie que le lien s'ouvre dans une nouvelle fenètre.
Pour l'ouvrir dans la meme fenètre il faut mettre "_parent"

Pour les images:


<img><xsl:attribute name="src"><xsl:value-of select="image_log" /></xsl:attribute></img>



Il va chercher la source de l'image dans la balise <image_log>
cette adresse peut etre relative ou absolue.

Maintenant je recherche la façon de faire un test dans mes balises xml,
je voudrais savoir comment je peux faire pour connaitre si la balise est vide ou non.


<xsl:if test="<xsl:value-of select="version_mod/text()" /> != null"/> 
	<td align="center"><a href='{demo_mod}' target="_blank">Version d'évaluation</a></td>
						  </xsl:if>



j'ai essayé ça, mais cela ne fonctionne pas.
Modifié par Cyr007 (21 Apr 2006 - 15:51)