salut
je suis en train de decouvrir xslt pour mettre en forme mon fil rss
mais je rencontre des problemes de formation
voici mon fichier xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!--<!DOCTYPE rss SYSTEM "http://localhost/projet_ing/RSS/rss2.dtd" >-->
<?xml-stylesheet href="./rss2.xslt" type="text/xsl"?>
<rss version="2.0">
	<channel>
		<title>essai</title>
		<link>http://localhost/projet_ing/</link>
		<description>premier test</description>
		<language>fr</language>
											
				<item>
			<title>test1</title>
			<link>http://localhost/projet_ing/index.php?module=actu&amp;action=display&amp;id=1</link>
			<description>premier test1</description>
									<guid>1</guid>
					</item>
				<item>
			<title>test2</title>
			<link>http://localhost/projet_ing/index.php?module=actu&amp;action=display&amp;id=2</link>
			<description>2ieme test</description>
									<guid>2</guid>
					</item>
			</channel>
</rss>


et coici mon xsl
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
 doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" indent="yes" />
 
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>

</head>
<body>
<xsl:template match="rss"> 
<xsl:for-each select="channel/item" oder-by="+guid">
<div id='#
<xsl:value-of select="guid"/>
'>
<h2><xsl:value-of select="title"/></h2>
<p><xsl:value-of select="description"></p>
</div>
</xsl:for-each>
</xsl:template>
</body>
 </html>
 </xsl:stylesheet>
(desole d'avoir tout mis Smiley ohwell )

j'ai un message d'erreur du type
Erreur d'analyse XML : mal formé
Emplacement : file:///E:/wamp/www/projet_ing/RSS/rss2.xslt
Numéro de ligne 14, Colonne 1 :<xsl:value-of select="guid"/>


mais je ne sais pas pourquoi il est mal formé je vois pas

j'aimerai avoir un petit coup de pouce
maerci
Modifié par jeff (17 Nov 2005 - 16:58)
Une des erreurs est que à chaque balise ouvrante ne correspond pas une balise fermante. Exemple :

<div id='#
<xsl:value-of select="guid"/>
'>


J'ai corrigé ton xsl :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="iso-8859-1" indent="yes" method="html"
        doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
    <xsl:template match="/">
        <html>
            <head> </head>
            <body>
                <xsl:apply-templates select="//item">
                    <xsl:sort select="guid"/>
                </xsl:apply-templates>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="item">
        <div>
            <xsl:attribute name="id">
                <xsl:text>#</xsl:text>
                <xsl:value-of select="guid"/>
            </xsl:attribute>
            <h2>
                <xsl:value-of select="title"/>
            </h2>
            <p>
                <xsl:value-of select="description"/>
            </p>
        </div>
    </xsl:template>
</xsl:stylesheet>


Il donne ce résultat :

<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   </head>
   <body>
      <div id="#1">
         <h2>test1</h2>
         <p>premier test1</p>
      </div>
      <div id="#2">
         <h2>test2</h2>
         <p>2ieme test</p>
      </div>
   </body>
</html>

Modifié par h2o (10 Nov 2005 - 15:18)
merci beaucoup H2O
je raisonne comme pour les template php Smiley ohwell

ce qui est dommage c'est que a cause de la transformation xsl
ma classe rencontre des problemes
mais ceci est un autre sujet developpez sur phpfrance
Note que le <xsl:sort /> peut-être complété de la façon suivante :

<xsl:sort data-type="number" order="ascending" select="guid"/>


Le type de donnée dans "guid" est un nombre, que je trie dans l'ordre ascendant.

Le type est soit "number", soit "text"
L'ordre est soit "ascending" soit "descending"

Dans le cas ou type = "text", tu peux ajouter un attribut "case-order" (majuscules/minuscules) qui est soit "lower-first" (minuscule avant majuscule), soit "upper-first".
En cas ou type = texte, il y a aussi l'attribut "lang" (langue) qui dans ton cas sera "fr" = français.
Modifié par h2o (10 Nov 2005 - 15:29)
merci pour toute ces precisions je suis en train d'etudier ce lien
Modifié par jeff (11 Nov 2005 - 11:58)
j'ai encore de petites questions

xslt permert en autre de transformer du xml en html, peut on utiliser css(lier au xslt) et xslt afin d'obtenir un code propre?est ce que utiliser css avec xslt a t il un sens quelconque??
Modifié par jeff (11 Nov 2005 - 12:58)
Bonjour,

Je ne comprend pas trop ce que tu veux faire. Tu veux mettre une feuille de style css sur la feuille de style xslt pour qu'elle ait une jolie présentation ? Si c'est le cas je n'ai jamais essayer mais il n'y a pas de raison que ca ne marche pas, xslt etant du xml. Mais cela a t'il un intéret ?
Modifié par 2bass (13 Nov 2005 - 21:19)
salut
pour info ca fonctionne
le seul interet etait de reutiliser un css pour avoir la meme presentation et de plus ca limite le code dans le xslt et sa durée d'execution
c'est tout
salut
je vient de me remetre au xsl
et je m'etonne du code que l'on ma donnée
            <body>

                <xsl:apply-templates select="//item">

                    <xsl:sort select="guid"/>

                </xsl:apply-templates>

            </body>

        </html>

    </xsl:template>

    <xsl:template match="item">

        <div>


on ferme le body et html
et on ecrit le reste du code??
Par l'utilisation des templates, c'est un peu comme si tu faisais un "include".

A ce niveau :
<xsl:apply-templates select="//item" />


viens s'insérer le contenu de :

<xsl:template match="item">
     [...]
</xsl:template>


Le "//item" est un xPath qui filtre le contenu souhaité. Dans le cas présent cela se traduit par "tous les éléments 'item' quelques soient leur niveau de profondeur dans l'arbre xml".
Modifié par h2o (17 Nov 2005 - 16:37)