Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1592 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  xslt

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

xslt

n°1778297
popcorn93
Posté le 27-08-2008 à 14:40:41  profilanswer
 

Bonjour
 
Je cherche a faire une action dans un element xml grace a un caractere
 
Pour exemple j'ai <toto>123 ; 456</toto>
 
et je voudrais que cela devienne <toto> <tata>123</tata> <tata>456</tata> </toto>
 
Merci d'avance si vous avez une solutions XSLT a me proposer

mood
Publicité
Posté le 27-08-2008 à 14:40:41  profilanswer
 

n°1778882
avander
Posté le 28-08-2008 à 10:24:11  profilanswer
 

Rien de sorcier... tu fais un template pour ton élément toto:
 
- tu obtiens le premier et le deuxième caractère avec une des fonctions XPath comme substring(), substring-after(), substring-before().
 
- tu génère une élément toto avec deux tata's avec xsl:element et xsl:attribute.
 

n°1786970
popcorn93
Posté le 15-09-2008 à 14:39:26  profilanswer
 

Merci de ton aide mais il me reste un probleme
 
Voici mon code
 <xsl:template match="toto">
        <xsl:choose>
  <xsl:when test="contains(.,';')">
            <xsl:call-template name="traitetoto">
                <xsl:with-param name="text" select="."/>
            </xsl:call-template>
  </xsl:when>
  <xsl:otherwise>
            <toto><xsl:value-of select="."/></toto>
        </xsl:otherwise>
        </xsl:choose>
 </xsl:template>
 
 
 
 
 
 
 <xsl:template name="traitetoto">
        <xsl:param name="text"/>
        <xsl:choose>
  <xsl:when test="not(contains($text,';'))">
            <toto><xsl:value-of select="."/></toto>
  </xsl:when>
  <xsl:otherwise>
            <toto><xsl:value-of select="substring(.,';')"/></toto>
            <xsl:call-template name="traitetoto">
                <xsl:with-param name="text" select="substring-after(.,';')"/>
            </xsl:call-template>
        </xsl:otherwise>
        </xsl:choose>
 </xsl:template>
 
 
 
 
Au debut j'ai  
 
<toto>123 ; 456</toto>
 
Je me retrouve avec  
 
<toto>123 </toto>
 
<toto>123 ; 456</toto>
 
Au lieu de  
 
<toto>123 </toto>
 
<toto>456</toto>
 
Nota bene je boucle car je peux avoir n+ <toto> (<toto>123 ; 456 ; 789</toto> )
 
Est ce que je suis bien parti et comment faire pour supprimer texte que j'ai deja repris  
 
 
Merci bcp


Message édité par popcorn93 le 15-09-2008 à 14:42:31
n°1787460
avander
Posté le 16-09-2008 à 09:45:23  profilanswer
 

Voici toujours un stylesheet similaire qui remplace les retours à la ligne par des <br /> dans les élements <code>, c'est le même problème et il utilise également la récursivité:
 

<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<!-- general settings -->
  <xsl:output method="xml" omit-xml-declaration="no" encoding="ISO-8859-1"/>
 
<!-- global variables -->
  <xsl:variable name="gReplace"><!-- replace target here is CR -->
    <xsl:text>
</xsl:text></xsl:variable>
 
<!-- transformations -->
 
  <xsl:template match="*">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
 
 
  <xsl:template match="//code/text()"><!-- replace only in code elements -->
    <xsl:call-template name="doReplace">
      <xsl:with-param name="text" select="."/>
    </xsl:call-template>
 
  </xsl:template>
 
 
  <xsl:template name="doReplace">
    <xsl:param name="text"/>
 
    <xsl:choose>
      <xsl:when test="contains( $text, $gReplace)">
        <xsl:value-of select="substring-before( $text, $gReplace)"/>
        <!-- substitue gReplace occurence with <BR /> string -->
        <xsl:element name="br"/>
        <xsl:call-template name="doReplace"><!-- recurse -->
          <xsl:with-param name="text" select="substring-after( $text, $gReplace)"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$text"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
 
</xsl:stylesheet>
<!-- eof -->


Message édité par avander le 16-09-2008 à 09:46:09
n°1787647
gilou
Modérateur
Modzilla
Posté le 16-09-2008 à 14:27:27  profilanswer
 

<xsl:template name="traitetoto">  
        <xsl:param name="text"/>  
        <xsl:choose>  
  <xsl:when test="not(contains($text,';'))">  
            <toto><xsl:value-of select="."/></toto>  
  </xsl:when>  
  <xsl:otherwise>  
            <toto><xsl:value-of select="substring(.,';')"/></toto>  
            <xsl:call-template name="traitetoto">  
                <xsl:with-param name="text" select="substring-after(.,';')"/>  
            </xsl:call-template>  
        </xsl:otherwise>  
        </xsl:choose>  
 </xsl:template>  
 
Dans ton template, tu as l'air de croire que le . designe le parametre $text à certains endroits, ce qui n'est pas le cas. Emploies le parametre, comme il est d'ailleurs fait dans l'exemple que tu viens de poster.
De plus, tu as confondu dans le deuxieme ligne en rouge, substring et substring-before.
A+,


Message édité par gilou le 16-09-2008 à 15:25:00

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1788654
popcorn93
Posté le 18-09-2008 à 14:55:29  profilanswer
 

Un grand merci  
 
cela m'a bcps avancer
 
Cordialement POPCORN


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  xslt

 

Sujets relatifs
XHTML (Dublin Core) + XSLT -> RDF[Résolu][XSLT] Utilisation de la librairie redirect
[Résolu] XSLT : grouper et sommer Transformation XSLT en Javascript
[XSLT] Position d'un élément (élément non courant)[Résolu] XSLT 2.0 dans PHP avec Saxon
[XSLT] Pagination flux RSS Client seulementXSLT variable and Javascript
XSLT et XSLFOXSLT avec un document XML validé avec XML schema pb....
Plus de sujets relatifs à : xslt


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR