[xml /xsl / dtd] Problème sur un noeud

Fermé
Sahasrara - 27 août 2005 à 18:01
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 - 28 août 2005 à 11:32
Bonjour,

J'ai besoin de votre aide afin de comprendre un mécanisme de XSL et de pouvoir corriger l'erreur.

Je commence par la fin et vous montre ce à quoi j'arrive et ce à quoi j'aimerais arriver :

Le résultat :
# Nom : Sahasrara Père : Mère :
# Amant : Cyltar
# Amant : Cyltar
# Nom : Cyltar Père : Mère :
# Amant : Sahasrara
# Amant : Sahasrara

Le résultat souhaité :
# Nom : Sahasrara Père : Mère :
# Amant : Cyltar
# Amant : Pèrebenoit
# Nom : Cyltar Père : Mère :
# Amant : Sahasrara
# Amant : Pèrebenoit

Comme vous le voyez le problème se situe aux niveaux des amants, puisque dans le cas réel j'affiche deux fois le même nom.

Voici maintenant le fichier XML (comprenant la dtd) et le fichier xsl :

xml/dtd :

<!DOCTYPE genealogie [
<!ELEMENT personne (pseudo, pere, mere, enfant*, epoux*, amant*)>

<!ELEMENT pseudo (nom) >
<!ELEMENT pere (nom) >
<!ELEMENT mere (nom) >
<!ELEMENT enfant (nom) >
<!ELEMENT epoux (nom) >
<!ELEMENT amant (nom) >
<!ELEMENT nom (#PCDATA) >
]>
<genealogie>
<personne>
<nom>Sahasrara</nom>
<amant>Cyltar</amant>
<amant>Pèrebenoit</amant>
</personne>
<personne>
<nom>Cyltar</nom>
<amant>Sahasrara</amant>
<amant>Pèrebenoit</amant>
</personne>
</genealogie>


le 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" media-type="text/html; charset=ISO-8859-1"/>
<xsl:template match="genealogie">
<html>
<head>
<title>
Généalogie du Clergé d'Azeroth
</title>
</head>
<body>
<xsl:apply-templates select="personne"/>
</body>
</html>
</xsl:template>

<xsl:template match="personne">
Nom : <xsl:value-of select="nom"/>
Père : <xsl:value-of select="pere"/>
Mère : <xsl:value-of select="mere"/>
<xsl:apply-templates select="amant"/>
</xsl:template>

<xsl:template match="amant">
<li>
Amant : <xsl:value-of select="../amant"/>
</li>
</xsl:template>

</xsl:stylesheet>




Ce qui m'intéresse est de comprendre pourquoi avec ma méthode le page ne s'affiche pas comme je le souhaite et si vous pouvez me donner la réponse en plus celà me permetrait de mieux comprendre.

Je vous remercie d'avance pour le temps que vous avez passé à lire le message et le temps que vous allez prendre pour y répondre.

Salutations, Sahasrara.
A voir également:

1 réponse

crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 507
28 août 2005 à 11:32
Salut,
Dans le template 'amant' tu écris
 Amant : <xsl:value-of select="../amant"/> 

Alors que tu veux afficher le texte du noeud courant. Le ../amant va te donner
la valeur (le texte) du premier noeud amant du pere du noeud courant (..).
Essaies avec :
 Amant : <xsl:value-of select="."/> 


A+, crabs
0