Création
d'entreprise
Posez votre question Signaler

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

Isotrope 103Messages postés 15 janvier 2009Date d'inscription 31 janvier 2012Dernière intervention - Dernière réponse le 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 :-)
Lire la suite 

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

1 réponses
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Ce document intitulé « Méga problème de la mort avec xsl/xml/dtd » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?