Méga problème de la mort avec xsl/xml/dtd

Fermé
Isotrope Messages postés 108 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 6 octobre 2012 - 4 avril 2010 à 03:53
 rimousky - 13 avril 2010 à 19:20
Bonjour!

Voici ma DTD:

<?xml version="1.0" encoding="iso-8859-1" ?>
<!ELEMENT test (ingrédients)>
<!ELEMENT ingrédients (ingrédient)+>
<!ELEMENT ingrédient (Sucre | Lait | Farine)>
<!ELEMENT Sucre EMPTY>
<!ELEMENT Lait EMPTY>
<!ELEMENT Farine EMPTY>


Voici mon fichier XML:

<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE test SYSTEM "test.dtd">
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<test>
<ingrédients>
<ingrédient>
<Farine/>
</ingrédient>
<ingrédient>
<Sucre/>
</ingrédient>
</ingrédients>
</test>


Voici mon fichier XSL:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE test SYSTEM "test.dtd">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML>
<HEAD> </HEAD>
<BODY> Ingrédient(s) : <xsl:value-of select="name(//test/ingrédients/ingrédient/*)"/>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>



Mon problème est que, dans le fichier final, seul le premier ingrédient (Farine) est affiché.

Comment faire pour que les 2 soient affichés?

Merci :-)
A voir également:

1 réponse

salut isotrope

Que souhaites-tu ?
créer un fichier xml et en afficher le contenu avec XSL ?

Si c'est cela pourquoi t'embarasses-tu d'une DTD ? Pour le pb posé, c'est inutile.
Par ailleurs c'st normal qu'io n'y ait que la première valeur qui s'affiche, ta fonction Xpath ne s'affiche qu'au 1er élément.
Ensuite le contenu de ta recette contient des ingrédients farine, sucre etc qui sont la valeur des éléments <ingrédients>
alors pourquoi tager la valeur des ingrédients <farine/> <sucre/>
la dtd n'a de sens que si tu veux imposer un modèle.
L'affichage du contenu est reporté dans le dernier template (solution 1)
Tu pourrais aussi utiliser une boucle à la place de <xsl:apply-templates/> et supprimer tous les templates autre que le principal

<xsl:for each select="ingrédients">
<xsl:value-of select="ingrédient"/><br/>
</xsl:for-each>


voilà un système xml + xsl qui marche

<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="testXSL.xsl" ?>
<test>
<ingrédients>
<ingrédient>
Farine
</ingrédient>
<ingrédient>
Sucre
</ingrédient>
</ingrédients>
</test>

====================================
solution 1

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML>
<BODY> Ingrédient(s) :<xsl:apply-templates/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="ingrédients">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="ingrédient">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>

============================
solution 2
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML>
<BODY> Ingrédient(s) :
<xsl:for-each select="test/ingrédients/ingrédient">
<xsl:value-of select="."/><br/>
</xsl:for-each>
</BODY>
</HTML>
</xsl:template>

</xsl:stylesheet>


Est-ce quer cela répond à ton problème ?
0