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 la valeur d'une balise en fonction de son propre contenu [XSLT 1.0]


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
    Novembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 71
    Par défaut Remplacer la valeur d'une balise en fonction de son propre contenu
    Bonjour,
    J'ai besoin de faire une XSLT à laquelle je passe en paramètre le chemin d'une balise, une valeur cible et une condition :
    but : remplacer la valeur de la balise par valCible si le contenu de nomElement = conditionTrue

    MAis ça ne fonctionne pas.
    Auriez-vous une idée?

    Merci d'avance.

    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
    <xsl:param name="nomElement">Nom_Element</xsl:param>
    	<xsl:param name="valCible">Valeur Cible</xsl:param>
    	<xsl:param name="conditionTrue">Condition</xsl:param>
    	<xsl:template match="node() | @*">
    		<xsl:copy>
    			<xsl:choose>
    				<xsl:when test="name()=$nomElement">
    				<xsl:if test=".=$conditionTrue"><xsl:value-of select="$valCible"></xsl:value-of></xsl:if>
    				<xsl:if test=".!=$conditionTrue"><xsl:apply-templates select="@* | node()"/></xsl:if>
    				</xsl:when>
    				<xsl:otherwise>
    					<xsl:apply-templates select="@* | node()"/>
    				</xsl:otherwise>	
    			</xsl:choose>
    		</xsl:copy>
    	</xsl:template>

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    MAis ça ne fonctionne pas.
    ... ne signifie pas grand-chose. Quel genre de paramètres vous passez au xslt ? Montrez les examples typiques.

    ...je passe en paramètre le chemin d'une balise
    Là, ça peut être le problème : dedans le xslt v1.0, on ne peut pas évaluer un xpath passé comme une chaîne de texte sans faire appel aux fonctionalités d'extension comme evaluate() de saxon, ou de la librairie exslt laquelle xalan porte bien le support. Mais avant toute chose, montrez les examples d'abord.

    Aussi faites attention que un test comme ".=$conditionTrue" ne compare que le contenu textuel de l'élément avec $conditionTrue. Et dans les circonstances usuelles, on doit faire attention aux espaces blancs et il vaut mieux parfois la réécrire comme "normalize-space()=$conditionTrue".

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 71
    Par défaut
    Bonjour et merci du retour.

    Je vais essayer d'être plus clair :
    Dans le fichier XML ci-dessous, je voudrais remplacer OBX3.1 (nomElement) par la valeur 'RP' (valCible) si et seulement si la valeur de la balise = 'ED' (conditionTrue).
    Et pour l'instant, la XSL ne fait aucune modification sur le fichier XML en sortie.

    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
    <OBX>
    <OBX.2.1>4</OBX.2.1>
    <OBX.3.1>ST</OBX.3.1>
    <OBX.4.1>18906-8</OBX.4.1>
    <OBX.4.2>Ciprofloxacin Susc Islt</OBX.4.2>
    <OBX.4.3>LN</OBX.4.3>
    <OBX.4.4>77002705</OBX.4.4>
    <OBX.4.5>CIPROFLOXACIN</OBX.4.5>
    <OBX.4.6>QDIMIA</OBX.4.6>
    </OBX>
    <OBX>
    <OBX.2.1>5</OBX.2.1>
    <OBX.3.1>ST</OBX.3.1>
    <OBX.4.1>18928-2</OBX.4.1>
    <OBX.4.2>Gentamicin Susc Islt</OBX.4.2>
    <OBX.4.3>LN</OBX.4.3>
    <OBX.4.4>77003705</OBX.4.4>
    <OBX.4.5>GENTAMICIN</OBX.4.5>
    <OBX.4.6>QDIMIA</OBX.4.6>
    </OBX>
    <OBX>
    <OBX.2.1>1</OBX.2.1>
    <OBX.3.1>ED</OBX.3.1>
    <OBX.4.1>ClinicalPDFReport1</OBX.4.1>
    <OBX.4.2>linical PDF Report MR077065T-1</OBX.4.2>
    <OBX.4.3/>
    <OBX.4.4></OBX.4.4>
    <OBX.4.5></OBX.4.5>
    </OBX>

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Si c'est le cas, je ne vois pas le problème; et si vous mettez OBX.3.1 au lieu de OBX3.1 pour nomElement ?!

  5. #5
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 199
    Par défaut
    Arrivez vous déjà à faire la transformation voulue sans passer aucun paramètre (en "dur") ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 71
    Par défaut
    Oui, désolé, c'est OBX.3.1 : erreur de saisie
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="OBX.3.1[1]!=$conditionTrue">
    la balise OBX.3.1 sort vide sur toutes les occurrences

    par contre, si je fais référence à une autre balise , j'obtiens bien ce que je veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="following::OBX.4.1[1]=$conditionTrue">
    avec conditionTrue =ClinicalPDFReport1

    Mais, cela ne me va pas, car d'une part, je m'appuie sur une balise dont je ne suis pas sûr du contenu et d'autre part, j'aurais voulu pouvoir réutiliser cette XSL sur n'importe quelle balise.

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

Discussions similaires

  1. une page php qui enregistre son propre contenu
    Par sami_c dans le forum Langage
    Réponses: 10
    Dernier message: 24/03/2006, 17h08
  2. Récuperer la valeur d'une balise html
    Par spynux dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 28/02/2006, 09h40
  3. recupere valeur d'une balise select
    Par naourass dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/11/2005, 10h18
  4. [XML] Comment remplacer la valeur de la balise ?
    Par laclac dans le forum Langage
    Réponses: 4
    Dernier message: 19/08/2005, 15h10

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