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 :

Remplacer une valeur contenue dans une URL [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Homme Profil pro
    cadre
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : cadre

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Remplacer une valeur contenue dans une URL
    Bonjour,

    Je souhaite remplacer une valeur dans une URL apellée via une variable.

    Je débute ... totalement, j'utilise le XSLT pour transformer des XML.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="URL" select="URL/AS/CATALOG_WCS_URL"></xsl:variable>
    qui remonte une URL de ce type => http: //api.com/catalogue/userservices?=quicklook&crs=XXX_XX

    Je souhaite remplacer "quicklook" par "album".

    Merci d'avance!

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    On va pas deviner de quoi tu parles.

    "Remplacer"... Remplacer où ?

    Montre le code avec un exemple qui explique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    cadre
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : cadre

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Effectivement, désolé pour cette explication succincte.

    En entrée, j'ai un xml contenant la balise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <CATALOG_WCS_URL>http://api.com/catalog/userservices?=quicklook&crs=DS_XXXXX_XXXXX</CATALOG_WCS_URL>
    Dans mon XSLT, j'appelle ce champ via le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <td width="{$ql_width}">
    <a>
    <xsl:attribute name="href">
    <xsl:value-of select="URL/AS/CATALOG_WCS_URL"/>
    </xsl:attribute> 
    QL
    </a>
    </td>
    En sortie, j'obtiens un lien hypertexte "QL" contenu dans un tableau. Ce lien pointe donc vers l'adresse internet ci-dessus.


    Je souhaite donc remplacer dans cette URL le mot "quicklook" par "album" afin d'obtenir un lien hypertexte pointant vers :

    http://api.com/catalog/userservices?=album&crs=DS_XXXXX_XXXXX

    Le lien issu de <CATALOG_WCS_URL> aura toujours la même construction, seule la partie en vert sera différente pour chaque XML d'entré (DS_XXXXX_XXXXX).

  4. #4
    Candidat au Club
    Homme Profil pro
    cadre
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : cadre

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'ai trouvé quelques choses de ce type, mais je ne m'en sors pas avec :


    L'exemple ci-joint remplace des CR par des <br /> dans le contenu d'un element code d'un xml donné:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?xml version="1.0" encoding="ISO-8859-1"?> 
     
    <!-- gReplaces text in xml code with markup --> 
     
    <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 --> 

  5. #5
    Candidat au Club
    Homme Profil pro
    cadre
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : cadre

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Solution trouvée :

    Remplacer une chaîne par une autre


    Lorsqu'on transforme un XML avec une feuille XSLT on a parfois besoin de remplacer une chaîne par une autre.
    Nativement, le XSL ne le fait pas mais il y a possibilité de programmer un remplacement.

    Code


    Vous devez ajoute le template suivant a votre feuille XSL :

    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
    21
    22
    23
    24
    25
     
    <xsl:template name="subst">
    	<xsl:param name="text"/>
    	<xsl:param name="replace"/>
    	<xsl:param name="with"/>
    	<xsl:choose>
    		<xsl:when test="string-length($replace) = 0">
    			<xsl:value-of select="$text"/>
    		</xsl:when>
    		<xsl:when test="contains($text, $replace)">
    			<xsl:variable name="before" select="substring-before($text, $replace)"/>
    			<xsl:variable name="after" select="substring-after($text, $replace)"/>
    			<xsl:value-of select="$before"/>
    			<xsl:value-of select="$with"/>
    			<xsl:call-template name="subst">
    				<xsl:with-param name="text" select="$after"/>
    				<xsl:with-param name="replace" select="$replace"/>
    				<xsl:with-param name="with" select="$with"/>
    			</xsl:call-template>
    		</xsl:when>
    		<xsl:otherwise>
    			<xsl:value-of select="$text"/>
    		</xsl:otherwise>
    	</xsl:choose>
    </xsl:template>
    Comment l'utiliser


    Normalement, en XSL pour afficher le contenu d'un noeud vous écrivez :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="MonNoeudAAfficher" />
    où MonNoeudAAfficher est à remplacer par le noeud désiré.
    Pour utiliser la fonction de remplacement vous devrez modifier votre ligne comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:call-template name="subst">
         <xsl:with-param name="text">
              <xsl:value-of select="MonNoeudAAfficher"/>
         </xsl:with-param>
         <xsl:with-param name="replace">MaChaineARemplacer</xsl:with-param>
         <xsl:with-param name="with">ChaineDeRemplacement</xsl:with-param>
    </xsl:call-template>
    où :

    • MonNoeudAAfficher est à remplacer par le noeud désiré.

    • MaChaineARemplacer représente la chaîne a remplacer.

    • ChaineDeRemplacement représente la chaîne de remplacement.

    Source : http://www.wikistuce.info/doku.php/x..._de_caracteres

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

Discussions similaires

  1. Remplacer le contenu d'une cellule par une valeur sous condition
    Par zoocoral dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/11/2015, 06h50
  2. Remplacer une requête sur une class par une valeur constante ?
    Par Lillie CHARLOTTE dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/06/2015, 09h59
  3. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  4. [XL-2007] [FORM] remplacer la valeur d'une cellule par une autre
    Par coldavires dans le forum Excel
    Réponses: 7
    Dernier message: 21/01/2010, 22h34
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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