0 votes

comment transformer du xml avec xslt en préservant <br /> et ne pas préserver les autres balises dans un texte.

Cette question est assez similaire à celui-ci . Sauf que je veux préserver seulement <br /> et quelques <img> (avec class="visible"). C'est-à-dire à partir de :

<example>
   <text>
      Some text with <br /> and <img src="source" /> then text .... <img class="visible" src="source" />
   </text>
</example>

A avoir :

 <div class="example"> 
  <p>Some text with <br /> and then text ....  <img class="visible" src="source" /></p> 
 </div>

1voto

Dimitre Novatchev Points 147842

Cette transformation :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="example">
   <div class="example">
    <xsl:apply-templates/>
   </div>
 </xsl:template>

 <xsl:template match="example/text">
   <p><xsl:apply-templates/></p>
 </xsl:template>

 <xsl:template match=
  "example/text/*
          [not(self::br)
         and
           not(self::img[@class='visible'])
          ]"/>
</xsl:stylesheet>

lorsqu'il est appliqué au document XML fourni, produit le résultat voulu et correct :

<div class="example"><p>
      Some text with <br/> and  then text .... <img class="visible" src="source"/></p></div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X