Bonjour,

Je rencontre un problème avec mon xsl, j'ai écris un template de remplacement de chaine de caractère qui fonctionne correctement.
Cependant, en le testant sur un noeud contenant de l'html, le remplacement a toujours lieu, mais le balise html de mon noeud disparait, et pourtant dans mon template, je ne travaille qu'avec des <xsl:copy-of select="[...]"/>.
Le fait de mettre une substring-before/after dans un copy-of a t'il un impact sur le balisage html ?

Merci d'avance
Bonjour,

Pourrais-tu préciser ce qui se passe? Quand tu écris que la balise html de ton noeud disparaît, est-ce que cela signifie
1. que dans ton code initial tu as <html>, mais que <html> n'apparaît plus dans le code de sortie?
2. que dans ton code initial tu as <html>, mais que tu vois &lt;html&gt; dans le code de sortie?

Est-ce que ton noeud est un élément html -plus précisément, est-ce qu'il commence et finit par <html> et </html>? Qiuand tu dis que ton élément html disparaît, est-ce l'élément html, ou bien entends-tu par là un élément de la spec HTML?

Comment utilises-tu ton substring-before/.after?

Pourrais-tu cerner ton problème et donner des exemples de code XML/XSLT, ainsi qu'un exemple de sortie désiré et ce que tu obtiens? Merci!
Je vois que je n'ai pas été très précis, alors voilà un exemple d'xml (pour le balisage HTML j'entendais par là des éléments de la spec HTML Smiley smile )


<content>
    ici ma substring à remplacer par exemple : @#<br/>
    ici mon texte avec balisage html :
    <table>
        <tr>
          <td>
            contenu du tableau
          </td>
        <tr>
     </table>
</content>


Voilà le fonctionnement des substring


<xsl:copy-of select="substring-before($str,'@#')"/><xsl:value-of select="$replacement"/>


Ensuite je réappelle mon template (template récursif) avec comme param $str, la substring-after($str,'@#')

Et voilà ce que j'obtiens:
a écrit :

ici ma substring à remplacer par exemple : MON_REMPLACEMENT ici mon texte avec balisage html : contenu du tableau


Mon html a completement disparu,tout mon texte est collé sans aucun élément de mise en forme HTML. En affichant la source, les balises ne sont même plus là :\ alors que je ne travaille qu'avec avec des copy-of (sauf pour la chaine de remplacement, où je travaille avec un value-of, mais elle n'a pas besoin de copy-of Smiley smile )

J'espère que j'ai été plus clair cette fois ci, merci d'avance Smiley smile
Bonjour,

Désolé pour le retard à la réponse: il y a une vie en-dehors du Web Smiley cligne

Je pense que ton problème vient que tu fais un copy-of d'une chaîne de caractères (ce que retourne la fonction XPath substring-after): il est logique que tes noeuds de type élément ne soient alors pas inclus: ton copy-of fait ce que tu lui demandes de faire: il insère dans le document de sortie des chaînes de caractères, pas des noeuds.

Comme ça, vite fait, je verrais plutôt un appel à des templates. Quand tu traites ton noeud content, tu appliques un template simple de copy-of à ton noeud table, et tu remplaces le template par défaut des noeuds de type text (qui est l'équivalent d'un simple <xsl:value-of select="." />, aux entités près) par la copie du contenu avec remplacement de la chaîne de caractères.