Bonjour,

Voila il me faudreit un petit renseignement pour savoir comment transformer mon contenu mixte en un autre contenu mixte?

mon xml:
<Muster id="5">Salut tu vas <b xmlns="http://www.w3.org/1999/xhtml" 
style="BACKGROUND-COLOR: #ff00ff" id="D" title="Et toi?">^</b> moi ca va </Muster>


la sortie que j'aimerais:
<Muster>Salut tu vas <D Des="Et toi?">^</D> moi ca va</Muster>


id devient le nom de la balise
title devient Des

La balise de départ s'appelera toujours b mais avec différent id (B,D,N ou T)!

Mon xsl:


...
<xsl:template match="Muster">
  <Muster>
    <xsl:apply-templates select="xhtml:b"/>
  </Muster>
</xsl:template>
<xsl:template match="xhtml:b">
  <xsl:choose>
    <xsl:when test="@id='B'"><B Des="{@title}"><xsl:value-of select="node()"/></B></xsl:when>
    <xsl:when test="@id='N'"><N Des="{@title}"><xsl:value-of select="node()"/></N></xsl:when>
    <xsl:when test="@id='T'"><T Des="{@title}"><xsl:value-of select="node()"/></T></xsl:when>
    <xsl:when test="@id='D'"><D Des="{@title}"><xsl:value-of select="node()"/></D></xsl:when>
  </xsl:choose>
</xsl:template>
...


Mon problème est que je ne sais pas comment copier le contenu text de ma balise Muster!

Quelqu'un pourrait-il m'aider?

Merci

Thierry
Modifié par virgul (16 Dec 2005 - 15:27)
Il me semble qu'un simple <xsl:apply-templates /> devrait te donner le résultat que tu cherches. Par défaut, un noeud texte est en effet copié tel quel...

Et puis, tu peux simplifier la création de ton élément:

<xsl:template match="xhtml:b">
<xsl:variable name="nom" select="@id"/>
<xsl:element name="$nom"><xsl:attribute name="Des"><xsl:value-of select="@title"/></xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:template>


Ton code est plus évolutif, et plus rapide (il n'y a plus de test).
Salut,

Merci pour ta réponse et c'est vrai ta solution est bien plus simple faudrait que je m'en inspire pour mes autres XSL!

Juste pour la beauté du geste il te manque {} quand tu déclare $nom comme nom de la balise!

Maintenant il faut que je m'attaque à la transformation inverse! Smiley biggol

++

Thierry
virgul a écrit :
Salut,

Merci pour ta réponse et c'est vrai ta solution est bien plus simple faudrait que je m'en inspire pour mes autres XSL!

Juste pour la beauté du geste il te manque {} quand tu déclare $nom comme nom de la balise!

Maintenant il faut que je m'attaque à la transformation inverse! Smiley biggol

++

Thierry


Non, les accolades ne sont pas toujours nécessaires. Ici, par exemple, elles sont inutiles...
a écrit :
Non, les accolades ne sont pas toujours nécessaires. Ici, par exemple, elles sont inutiles...


??? XMLSpy refuse de le parser si elle ne sont pas présente et ca avec msxml 3 et 4 et son parseur ?

Autre question à quoi elle sert vraiment cette variable pourquoi ne pas déclarer l'attribut directement dans xsl:element?

pour la transformation inverse j'ai fait comme ceci:

<xsl:template match="B">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name=
"title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/>
<xsl:attribute name="id">B</xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:template>
<xsl:template match="N">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name=
"title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute 
name="style"/>
<xsl:attribute name="id">N</xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:template>
<xsl:template match="D">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name=
"title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/>
<xsl:attribute name="id">D</xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:template>
<xsl:template match="T">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name=
"title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/>
<xsl:attribute name="id">T</xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:template>


Qu'en penses-tu?

Merci d'avance
Modifié par virgul (28 Nov 2005 - 14:20)
virgul a écrit :


??? XMLSpy refuse de le parser si elle ne sont pas présente et ca avec msxml 3 et 4 et son parseur ?

Ah? Bon... Ca marche avec Xalan...

a écrit :

Autre question à quoi elle sert vraiment cette variable pourquoi ne pas déclarer l'attribut directement dans xsl:element?

A rien Smiley cligne C'est, je crois, de la déformation professionnelle (je suis prof): toujours montrer quelque chose le plus généralisable possible! Désolé, je me suis laisssé entraîner...

a écrit :

pour la transformation inverse j'ai fait comme ceci:

<xsl:template match="B">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name=
"title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/>
<xsl:attribute name="id">B</xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:template>
<xsl:template match="N">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name=
"title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute 
name="style"/>
<xsl:attribute name="id">N</xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:template>
<xsl:template match="D">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name=
"title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/>
<xsl:attribute name="id">D</xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:template>
<xsl:template match="T">
<xsl:element name="b" namespace="http://www.w3.org/1999/xhtml"><xsl:attribute name=
"title"><xsl:value-of select="@Des"/></xsl:attribute><xsl:attribute name="style"/>
<xsl:attribute name="id">T</xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:template>


Qu'en penses-tu?

Merci d'avance


Hum... Je te dirai ça plus tard, c'est la fin de la pause et mes étudiants attendent Smiley lol