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

Sahasrara -  
crabs Messages postés 909 Statut Membre -
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 909 Statut Membre 507
 
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