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] Changer la valeur d'un attribut XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut [XSLT] Changer la valeur d'un attribut XML
    Bonjour,

    J'ai un probleme que j'aimerais bien regler concernant la valeur d'un attribut XML. Ca fait des heures que je cherche sur internet et je ne trouve pas.

    J'ai donc le fichier .xml suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="date.add.template.xsl"?>
     
    <root>
    <set_value value_id = "value_date" value = "2007-02-08" datatype = "date" format = "yyyy-MM-dd"/>
    </root>
    et un fichier date.add.template.xsl dans lequel j'ai créé une fonction qui va prendre en parametre la date de l'attribut value de l'élément set_value du fichier XML pour ajouter un certain nombre de jours et apres je recupere la nouvelle date dans une variable comme suit et j'essaye de changer la valeur de l'attribut value de l'élément set_value avec ma nouvelle date mais je n'arrive pas :
    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 match="set_value">
    <html><body>
    	<xsl:choose> 
    	<xsl:when test="@value_id='value_date'">
                              <!-- Ma variable fecha qui recupere le resultat de ma fonction -->
    		<xsl:variable name="fecha">
    			<xsl:call-template name="date:add">
    			<xsl:with-param name="date-time" select="@value"/>
    			<xsl:with-param name="duration" select="'P5D'"/>
    			</xsl:call-template>
    		</xsl:variable>
     
                              <!-- Ceci affiche bien la nouvelle valeur de la date (+ 5 jours) : 2007-02-13-->
    		<xsl:value-of select="$fecha"/>
     
                              <!-- Mon probleme est ici, j'essaye de changer la valeur de l'attribut -->
    		<xsl:attribute name="value"><xsl:value-of select="$fecha"/></xsl:attribute>
     
                              <!-- Ici ca m'affiche tjs la date 2007-02-08 que j'avais anciennement donc mon fichier XML n'a pas été modifier. J'aimerais obtenir ici la date 2007-02-13 -->
    		<xsl:value-of select="@value"/>
    	</xsl:when>
    	</xsl:choose>
    </body></html>
    </xsl:template>
    Merci d'avance pour vos idées et pour votre aide

    Nicolas

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    que ce que tu veux voir en sortie? un document .html? ou .xml?

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'aimerais obtenir en sortie un fichier XML avec la nouvelle valeur pour l'attribut value de l'élément set_value. En gros je veux que mon fichier XSL me remplace "2008-02-08" par "2008-02-13" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="date.add.template.xsl"?>
     
    <root>
    <set_value value_id = "value_date" value = "2007-02-13" datatype = "date" format = "yyyy-MM-dd"/>
    </root>
    Dans mon fichier XML j'ai d'autres balises set_value, c'est pour cela que je fais un test sur la valeur de l'attribut value_id. Le but final est d'afficher un tableau avec une date de transaction égale a 2008-02-08 et une date valeur avec 5 jours en plus, d'ou ma fonction pour ajouter un nombre de jour (Je recupere en fait la date : 2008-02-08 d'un fichier txt)

  4. #4
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    un essai de code
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output 
      encoding="ISO-8859-15"
      method="html"
      doctype-public="-//W3C//DTD HTML 4.01//EN"
      doctype-system="http://www.w3.org/TR/html4/strict.dtd"
      indent="yes" />
     
     
    <xsl:template match="set_value">
    <root>
    	<xsl:choose> 
    	<xsl:when test="@value_id='value_date'">
                              <!-- Ma variable fecha qui recupere le resultat de ma fonction -->
    		<xsl:variable name="fecha">
    			<xsl:call-template name="date:add">
    			<xsl:with-param name="date-time" select="@value"/>
    			<xsl:with-param name="duration" select="'P5D'"/>
    			</xsl:call-template>
    		</xsl:variable>
     
                              <!-- Ceci affiche bien la nouvelle valeur de la date (+ 5 jours) : 2007-02-13-->
    		<xsl:value-of select="$fecha"/>
     
                              <!-- Mon probleme est ici, j'essaye de changer la valeur de l'attribut -->
    		<xsl:element name="set_value">
    		<xsl:attribute name="value"><xsl:value-of select="$fecha"/></xsl:attribute>
    		<xsl:attribute name="value_id">value_date</xsl:attribute>
    		<xsl:attribute name="datatype">date</xsl:attribute>
    		<xsl:attribute name="format">yyyy-MM-dd</xsl:attribute>
     
                              <!-- Ici ca m'affiche tjs la date 2007-02-08 que j'avais anciennement donc mon fichier XML n'a pas été modifier. J'aimerais obtenir ici la date 2007-02-13 -->
    		<xsl:value-of select="@value"/>
    		</xsl:element>
    	</xsl:when>
    	</xsl:choose>
    </root>
    </xsl:template>
    </xsl:stylesheet>

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour cet essai fraoustin mais ca ne marche tjs pas. Je ne sais vraiment pas pourquoi, c'est bizarre. Je me demande si l'environnement peut jouer la dessus...
    Si vous avez d'autres idées, n'hésitez pas
    Merci d'avance

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je sais pas si ca peut changer vous aider mais mon code exact dans mon fichier XML c'est :

    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="date.add.template.xsl"?>
     
    <root>
    <use_node_attribute attribute_id="fecha">
    	<save_value_to_context key = "fecha_temp"/>
    </use_node_attribute>
    <condition_test_element condition_type="string_length_validation">
    	<attribute_id value="fecha_temp"/>
    	<parameter id="min_length" value="9"/>
    	<parameter id="max_length" value="9"/>
    	<result_handler status_code="LESS_THAN_MIN">
    		<set_value value_id = "txn_date" value = "${fecha_temp}" datatype = "date" format = "ddMMyy"/>
    			<set_value value_id = "value_date" value = "080207" datatype = "date" format = "ddMMyy"/>
    		</result_handler>
    		<result_handler status_code="GREATER_THAN_MAX">
    			<set_value value_id = "txn_date" value = "${fecha_temp}" datatype = "date" format = "ddMMyyyy"/>
    			<set_value value_id = "value_date" value = "080207" datatype = "date" format = "ddMMyyyy"/>
    		</result_handler>
    	</condition_test_element>
    </root>
    Voila, merci pour votre aide...

  7. #7
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    oui en effet cela change essaye cela maintenant
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output 
      encoding="ISO-8859-15"
      method="html"
      doctype-public="-//W3C//DTD HTML 4.01//EN"
      doctype-system="http://www.w3.org/TR/html4/strict.dtd"
      indent="yes" />
     
    <xsl:template match="/">
    <xsl:apply-template select="//set_value">
    </xsl:template>
     
    <xsl:template match="set_value">
    <root>
    	<xsl:choose> 
    	<xsl:when test="@value_id='value_date'">
                              <!-- Ma variable fecha qui recupere le resultat de ma fonction -->
    		<xsl:variable name="fecha">
    			<xsl:call-template name="date:add">
    			<xsl:with-param name="date-time" select="@value"/>
    			<xsl:with-param name="duration" select="'P5D'"/>
    			</xsl:call-template>
    		</xsl:variable>
     
                              <!-- Ceci affiche bien la nouvelle valeur de la date (+ 5 jours) : 2007-02-13-->
    		<xsl:value-of select="$fecha"/>
     
                              <!-- Mon probleme est ici, j'essaye de changer la valeur de l'attribut -->
    		<xsl:element name="set_value">
    		<xsl:attribute name="value"><xsl:value-of select="$fecha"/></xsl:attribute>
    		<xsl:attribute name="value_id">value_date</xsl:attribute>
    		<xsl:attribute name="datatype">date</xsl:attribute>
    		<xsl:attribute name="format">yyyy-MM-dd</xsl:attribute>
     
                              <!-- Ici ca m'affiche tjs la date 2007-02-08 que j'avais anciennement donc mon fichier XML n'a pas été modifier. J'aimerais obtenir ici la date 2007-02-13 -->
    		<xsl:value-of select="@value"/>
    		</xsl:element>
    	</xsl:when>
    	</xsl:choose>
    </root>
    </xsl:template>
    </xsl:stylesheet>

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour ce code fraoustin, mais ca ne marche tjs pas. En fait je veux obtenir en sortie un fichier xml donc je pense ke ds l'output il faut mettre method="xml". Je me demande également comment voir si le changement a bien été effectué.
    En fait pour faire ce test, j'ai créé un site web sous IIS dans lequel g mis les 2 fichiers xml (test.xml) et xsl (date.add.template.xsl) et ensuite j'exécute le xml ds le browser. Le truc c ke apres l'execution (j'ai donc ma page internet explorer), j'affiche ma source pour voi s'il y a eu un changement mais mon fichier n'a pas été changé.
    Je me demande donc si je ne fais pas une fausse manipulation ou quelque chose comme ca.

    Merci d'avance

  9. #9
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    en faite via ton naviguateur tu regardes ton fichier xml de départ!!!
    et bien le problème vient de là: en faite ton naviguateur effectue la transformation à la volée et le source correspond à ton fichier xml, pas à ton fichier xml transformé (du moins sous firefox)

  10. #10
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Le problème est que xslt ne s'occupe pas des fichiers "physiques". Il ne sauvegarde ni ne modifie les fichiers du disque dur, il ne travaille que sur les flux en mémoire, après c'est à toi , via un autre langage, de recuperer le flux modifié pour le sauvegarder comme tu l'entends

  11. #11
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos réponses... Donc maintenant g une autre question, savez-vous comment récupérer le flux de sortie XML avec ASP...

    Merci d'avance

  12. #12
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    C bon g trouvé comment faire. Merci beaucoup pour votre aide...!!!

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

Discussions similaires

  1. C# fichier XML changer la valeur d'un attribut
    Par Seth_75 dans le forum C#
    Réponses: 4
    Dernier message: 31/10/2008, 09h51
  2. [DOM] Changer la valeur d un attribut d un noeud.
    Par nivose110 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 01/07/2006, 16h39
  3. Comment changer la valeur d'un attribut avec une stylesheet?
    Par BugsBunny dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/06/2006, 18h18
  4. [xslt] affecter la valeur d'un attribut HTML
    Par ouioui2000 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 16/12/2005, 10h49
  5. modifier la valeur d'un attribut xml
    Par totoche dans le forum ASP
    Réponses: 2
    Dernier message: 13/12/2005, 15h01

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