[XSLT]Récursivité

Récursivité [XSLT] - XML/XSL - Programmation

Marsh Posté le 17-10-2007 à 17:02:40    

Bonjour à tous,
 
Premier post depuis longtemps,j'espère que vous saurez résoudre mon problème :
 
J'ai un fichier xml  qui ressemble à cà

Code :
  1. <line text="Voir aussi : Asthme : échelle thérapeutique et mesures préventives en cas d'allergie des voies respiratoires...">
  2.       <keyword kwdword="échelle thérapeutique" kwdlink="0000019" />
  3.       <keyword kwdword="mesures préventives" kwdlink="0000020" />
  4.     </line>


 
Et je dois obtenir cà dans mon fichier HTML (Ce sera plus clair)

Code :
  1. Voir aussi : Asthme : <a href="0000019">échelle thérapeutique</a> et <a href="0000020">mesures préventives</a> en cas d'allergie des voies respiratoires...


 
Pour l'instant j'ai le code xslt qui ressemble à ça

Code :
  1. <xsl:if test="count(keyword)!=0">
  2.       <xsl:for-each select="keyword">
  3.          
  4.         <xsl:variable name="text">
  5.            
  6.             <xsl:value-of select="substring-before(../@text, @kwdword)"/>
  7.            
  8.             <xsl:element name="a">
  9.               <xsl:attribute name="href">
  10.                 <xsl:value-of select="@kwdlink"/>
  11.               </xsl:attribute>
  12.               <xsl:value-of select="@kwdword"/>
  13.             </xsl:element>
  14.            
  15.             <xsl:value-of select="substring-after(../@text, @kwdword)" />
  16.          
  17.           </xsl:variable>
  18.          
  19.         <!--<xsl:element name="a">
  20.           <xsl:attribute name="href">
  21.             <xsl:value-of select="@kwdlink"/>
  22.           </xsl:attribute>
  23.           <xsl:value-of select="@kwdword"/>
  24.         </xsl:element>
  25.         <xsl:value-of select="substring-after(/@text, @kwdword)" />-->
  26.         &quot;<xsl:copy-of select="$text" />&quot;   
  27.       </xsl:for-each>


 
Et mon résultat est celui là en html
 

Code :
  1. Voir aussi : Asthme : <a href="0000019">échelle thérapeutique</a> et mesures préventives en cas d'allergie des voies respiratoires...Voir aussi : Asthme : échelle thérapeutique et <a href="0000020">mesures préventives</a> en cas d'allergie des voies respiratoires...


 
J'ai lu que par traitement récursif ca devrait fonctionner mais je n'ai aucune idée de comment ça marche !! Quelqu'un pour éclairer ma lanterne ?
 
Ethan Decoster


Message édité par ethan_decoster le 17-10-2007 à 17:04:49
Reply

Marsh Posté le 17-10-2007 à 17:02:40   

Reply

Marsh Posté le 26-11-2007 à 16:28:42    

Un exemple de find/replace récursif:
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <!-- gReplaces text in cpp code with xml markup -->
  3. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  4. <!-- general settings -->
  5.   <xsl:output method="xml" omit-xml-declaration="no" encoding="ISO-8859-1"/>
  6. <!-- global variables -->
  7.   <xsl:variable name="gReplace"><!-- replace target here is CR -->
  8.     <xsl:text>
  9. </xsl:text></xsl:variable>
  10. <!-- transformations -->
  11.   <xsl:template match="*">
  12.     <xsl:copy>
  13.       <xsl:copy-of select="@*"/>
  14.       <xsl:apply-templates/>
  15.     </xsl:copy>
  16.   </xsl:template>
  17.   <xsl:template match="//code/text()"><!-- replace only in code elements -->
  18.     <xsl:call-template name="doReplace">
  19.       <xsl:with-param name="text" select="."/>
  20.     </xsl:call-template>
  21.   </xsl:template>
  22.   <xsl:template name="doReplace">
  23.     <xsl:param name="text"/>
  24.     <xsl:choose>
  25.       <xsl:when test="contains( $text, $gReplace)">
  26.         <xsl:value-of select="substring-before( $text, $gReplace)"/>
  27.         <!-- substitue gReplace occurence with <BR /> string -->
  28.         <xsl:element name="br"/>
  29.         <xsl:call-template name="doReplace"><!-- recurse -->
  30.           <xsl:with-param name="text" select="substring-after( $text, $gReplace)"/>
  31.         </xsl:call-template>
  32.       </xsl:when>
  33.       <xsl:otherwise>
  34.         <xsl:value-of select="$text"/>
  35.       </xsl:otherwise>
  36.     </xsl:choose>
  37.   </xsl:template>
  38. </xsl:stylesheet>
  39. <!-- eof -->

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed