0
votes

XSLT: Dans un élément

, comment remplacer une pause de ligne (
) avec un élément successif ?

J'essaie de transformer un élément

code> avec
code> dans plusieurs sous-texte alinéa> code >. Par exemple: xxx pré>

à partir du précédent

code> J'espérais simplement remplacer tout
code> dans code> depuis le modèle de

code> ouvre un code> élément déjà. P>

<para>
   <alinea>
     subtext
   </alinea>
   <alinea>
     some more text
   </alinea>
   <alinea>
     some more subtext
   </alinea>
 </para>


6 commentaires

Pouvez-vous s'il vous plaît fournir une entrée XML?


fait dans la question. Merci.


Et si l'entrée XML contient d'autres éléments, E.G:

sous-texte
Quelque plus de texte
Quelque plus de texte

abc ?


Semble travailler, j'ajouterais simplement un modèle pour

: xsltfiddle.liberty-development.net/jyh9rmd/1


Des questions telles que ceci doivent être étiquetées "XSLT 1.0" ou "XSLT 2.0". Les solutions utilisant des constructions 2.0 sont généralement beaucoup plus faciles, mais tout le monde (malheureusement) n'a accès à un processeur XSLT 2.0 (ou 3.0).


C'est XSLT 2.0 en effet. Merci.


3 Réponses :


-1
votes

J'ai trouvé un moyen (sale?) de remplacer avec : xxx

Quelque chose de plus joli?


2 commentaires

Je serais heureux d'avoir une explication sur le vote en direct, car la solution fonctionne parfaitement! :)


Je doute toute réponse qui utilise DOE pour créer un balisage.



1
votes

Proby Vous pouvez utiliser quelque chose comme ceci:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="p">
    <para>
      <xsl:apply-templates/>
    </para>
  </xsl:template>

  <xsl:template match="text()">
    <aline>
      <xsl:value-of select="."/>
    </aline>
  </xsl:template>

  <xsl:template match="br"/>

  <xsl:template match="div">
    <blockquote>
      <xsl:value-of select="."/>
    </blockquote>
  </xsl:template>

</xsl:stylesheet>


1 commentaires

J'anticipe que votre solution mettra en place élément partout dans le texte. Par exemple, un texte avec emphase

bonjour monde entraînera bonjour Monde .



1
votes

Ceci est assez facile à faire dans XSLT 2.0:

<xsl:template match="p">
    <para>
        <xsl:for-each-group select="node()" group-starting-with="br">
            <alinea>
                <xsl:copy-of select="current-group()[not(self::br)]" />
            </alinea>   
        </xsl:for-each-group>
    </para>
</xsl:template>


0 commentaires