Bonjour,

Je me lance dans utilisation de XLST pour extraire du texte d'un fichier SVG.

Le code XML (simplifié provient de Inkscape):
 
<svg><g>
<text>
<tspan>Mais qu'est-ce que</tspan>
<tspan>j'ai pu être
<tspan font="bold">naïve</tspan>
 !</tspan>
</text>
</g></svg>


le code XSLT :

<xsl:for-each select="svg/g/text">
<xsl:for-each select="tspan">
<xsl:value-of select="text()"/>.
</xsl:for-each>
<xsl:for-each select="tspan/tspan">
<xsl:value-of select="text()"/>.
</xsl:for-each>
</xsl:for-each>


Mon soucis est que le résultat ne prend pas en compte le point d'exclamation "!" présent dans le <tspan>
Le résultat :
Mais qu'est-ce que. j'ai pu être . naïve.

Au lieu de :

Mais qu'est-ce que. j'ai pu être . naïve. !.

Merci de vos pistes. Smiley cligne

PS: (les points "." ajoutés après la récupération du texte, c'est pour ne pas avoir:
Mais qu'est-ce quej'ai pu être naïve , absence d'espace entre les text() Smiley decu )
Modifié par Flechebleu (02 May 2022 - 22:21)
Salut,

trop longtemps que j'en ai pas fait Smiley sweatdrop , mais dans mes souvenirs c'était souvent plus efficace/intuitif de passer par des templates (template match et named template je crois) que de faire des boucles Smiley ohwell
Merci Mathieuu, pour le retour d'expérience,

En combinant en amont avec un SED sous linux, pour séparer les TSPAN (/tpsan><tspan en /tspan> <tspan)
j'ai le résultat attendu , et même l’incrémentation des paragraphes Smiley cligne

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"/>
  <xsl:template match="svg/g/text">
          <xsl:variable name="i" select="position()" />
              PARA<xsl:value-of select="concat('num=', $i div 2)"/>  <xsl:apply-templates/>
<xsl:text> FPARA
</xsl:text>
       </xsl:template>
</xsl:stylesheet>


Merci à tous Smiley cligne