IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT] Existe-t-il une fonction Replace() ?


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 180
    Par défaut [XSLT] Existe-t-il une fonction Replace() ?
    Bonjour,

    Je cherche à appliquer une XSLT à mon XML pour avoir un HTML, mon problème c'est que j'ai un champs dont la valeur est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <valeurAffichee>
    <a href="#" onclick="return false;">BELD Djamel</a><br><a href="#" onclick="return false;">MHG Stephane</a>
    </valeurAffichee>
    L'idée ce serait de virer les balises <a> pour supprimer le lien.
    J'ai utiliser ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    substring-after(substring-before( //champ[@id=784]/valeurAffichee ,'&lt;/a' ),'&gt;')
    Mais bien evidement, cela supprime la seconde occurence, une idée ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    ta source n'est pas du xml bien formé, ce ne serait pas plutôt ça que tu as ?
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <valeurAffichee>
    &lt;a href="#" onclick="return false;"&gt;BELD Djamel&lt;/a&gt;&lt;br&gt;&lt;a href="#" onclick="return false;"&gt;MHG Stephane&lt;/a&gt;
    </valeurAffichee>

    substring-before() et substring-after() ne renvoient que les chaînes venant avant ou après la première occurrence de la chaîne de recherche ; il te faut donc écrire un petit template récursif en XSLT utilisant ces deux fonctions pour gérer toutes les occurrences, .

    Une autre possibilité consisterait à avoir des balises XML dans <valeurAffichee> plutôt que du texte comme actuellement, il suffirait alors d'écrire un template pour gérer les liens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="a">
      <xsl:value-of select="." />
    </xsl:template>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 180
    Par défaut
    si c'est précisément ça, il s'agit de texte [CDATA].

    Le souci c'est que je n'ai pas la main sur la génération du XML, il me reste donc à faire comme tu le propose un petit template récursif en XSLT, malheureusement je ne trouve pas d'exemple et doit reconnaitre être sec sur le sujet...

  4. #4
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Un petit truc vite fait, sans doute améliorable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <xsl:template match="valeurAffichee">
    	<xsl:call-template name="strip-a">
    		<xsl:with-param name="text" select="."/>
    	</xsl:call-template>
    </xsl:template>
    <xsl:template name="strip-a">
    	<xsl:param name="text"/>
    	<xsl:choose>
    		<xsl:when test="contains($text, '&lt;a')">
    			<xsl:value-of select="substring-before($text, '&lt;a')"/>
    			<xsl:value-of select="substring-after(substring-after(substring-before($text, '&lt;/a&gt;'), '&lt;a'), '&gt;')"/>
    			<xsl:call-template name="strip-a">
    				<xsl:with-param name="text" select="substring-after($text, '&lt;/a&gt;')"/>
    			</xsl:call-template>
    		</xsl:when>
    		<xsl:otherwise>
    			<xsl:value-of select="$text"/>
    		</xsl:otherwise>
    	</xsl:choose>
    </xsl:template>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 180
    Par défaut
    Super, merci beaucoup, j'ai modifié les < & > par des &lt; et &gt; ca roule, reste à supprimer les <br>, j'espère le faire sans template si compliqué.

    Merci de ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Somme des champs ? existe t il une fonction ...
    Par dark_vidor dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/01/2006, 11h57
  2. Existe-t-il une fonction Eval() sous Delphi ?
    Par Hell dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2004, 17h45
  3. Existe-t-il une fonction "Chercher" dans un TWebBrowser ?
    Par Michel Devaud dans le forum Composants VCL
    Réponses: 2
    Dernier message: 15/12/2004, 07h30
  4. Réponses: 7
    Dernier message: 03/12/2004, 12h40
  5. Existe-t-il une fonction "IsAlphaNumérique" ?
    Par Bruno75 dans le forum Langage
    Réponses: 7
    Dernier message: 20/09/2004, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo