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] Transformation d'un noeud en attribut


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [XSLT] Transformation d'un noeud en attribut
    Bonjour à tous,

    Je débute complètement en XML / XSLT, et je suis devant un petit problème concernant les transformations. J'ai lu pas mal de tutorial sur les transformations pour l'affichage des données XML en HTML, mais mon problème est autre :

    J'ai un fichier XML du type suivant :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <Data>
     <ARTICLE>
      <GA_CODEARTICLE>ref_article1</GA_CODEARTICLE> 
      <GA_LIBELLE>designation_article1</GA_LIBELLE> 
      <GA_LIBREART1>marque_article1</GA_LIBREART1> 
      <GA_PVHT>prix_article1</GA_PVHT> 
      </ARTICLE>
     <ARTICLE>
      <GA_CODEARTICLE>ref_article2</GA_CODEARTICLE> 
      <GA_LIBELLE>designation_article2</GA_LIBELLE> 
      <GA_LIBREART1>marque_article2</GA_LIBREART1> 
      <GA_PVHT>prix_article2</GA_PVHT> 
      </ARTICLE>
    </Data>
    que j'aimerais transformer en fichier XML du type suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <Data>
     <ARTICLE GA_CODEARTICLE="ref_article1" GA_LIBELLE="designation_article1" GA_LIBREART1="marque_article1" GA_PVHT="prix_article1" \>
    <ARTICLE GA_CODEARTICLE="ref_article2" GA_LIBELLE="designation_article2" GA_LIBREART1="marque_article2" GA_PVHT="prix_article2" \>
    </Data>
    En gros, il s'agit de transformer les noeuds en attributs afin de pouvoir utiliser la méthode de traitement décrite dans cet article :
    http://philflash.inway.fr/dgperf/

    Désolé par avance si ma question semble triviale, mais je n'ai pas trouvé de tutorial clair pour une transformation XML -> XML

  2. #2
    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 petit bout de code
    xml
    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
     
    <Data>
     <ARTICLE>
      <GA_CODEARTICLE>ref_article1</GA_CODEARTICLE> 
      <GA_LIBELLE>designation_article1</GA_LIBELLE> 
      <GA_LIBREART1>marque_article1</GA_LIBREART1> 
      <GA_PVHT>prix_article1</GA_PVHT> 
      </ARTICLE>
     <ARTICLE>
      <GA_CODEARTICLE>ref_article2</GA_CODEARTICLE> 
      <GA_LIBELLE>designation_article2</GA_LIBELLE> 
      <GA_LIBREART1>marque_article2</GA_LIBREART1> 
      <GA_PVHT>prix_article2</GA_PVHT> 
      </ARTICLE>
    </Data>
    xslt
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
     
    	<xsl:template match="/">
    		<data>
    			<xsl:apply-templates select="*"/>
    		</data>
    	</xsl:template>
     
    	<xsl:template match="ARTICLE">
    		<xsl:element name="{local-name()}">
    		<xsl:for-each select="*">
    			<xsl:attribute name="{local-name()}"><xsl:value-of select="."/> </xsl:attribute>
    		</xsl:for-each>
    		</xsl:element>
    	</xsl:template>
     
    </xsl:stylesheet>

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Super, le bout de code donné fonctionne parfaitement

    Merci à toi, je vais maintenant décortiquer tout ça pour comprendre son fonctionnement, avant d'essayer d'aller plus loin...

    Les 3 autres problèmes principaux sur lesquels je vais me pencher :

    - Le remplacement des caractères "," dans les prix par des "." (Ex : Remplacer 12,34 par 12.34)
    - La sauvegarde du fichier XML résultant une fois traité par la XSL directement sur disque dur, pour que je puisse y faire appel directement depuis mon appli Flash sans repasser par une transformation à chaque fois
    - Automatiser le tout ^^

    Si jamais vous avez des pistes concernant tout ces petits problèmes, je suis preneur

    Merci encore pour le coup de main

  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
    juste un bout de reponse concernant ton remplacement pour les prix tu peux utiliser la fontion replace(str,',','.')

    ce qui peut donner le bout de code xslt suivant:
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
     
    	<xsl:template match="/">
    		<data>
    			<xsl:apply-templates select="*"/>
    		</data>
    	</xsl:template>
     
    	<xsl:template match="ARTICLE">
    		<xsl:element name="{local-name()}">
    		<xsl:for-each select="*">
                            <xsl:if test="local-name() = 'GA_PVHT'">
    			    <xsl:attribute name="{local-name()}"><xsl:value-of select="replace(.,',','.')"/> </xsl:attribute>
                             </xsl:if>
                            <xsl:if test="local-name() != 'GA_PVHT'">
    			    <xsl:attribute name="{local-name()}"><xsl:value-of select="replace(.,',','.')"/> </xsl:attribute>
                             </xsl:if>
    		</xsl:for-each>
    		</xsl:element>
    	</xsl:template>
     
    </xsl:stylesheet>

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Petit commentaire sur la dernière version XSL proposée (remplacement des "," par des ".") :

    La fonction replace n'était pas reconnue lors de l'application de la transformation, j'ai donc utilisé à la place la fonction translate et tout fonctionne parfaitement

    Merci encore et meilleurs voeux pour cette année qui commence

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

Discussions similaires

  1. XML/XSLT : Transformer balises et attributs
    Par ORageODesespoir dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 09/05/2013, 13h12
  2. [XSLT] transformation HTML problème sur les attributs
    Par mamax29 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 02/12/2010, 14h28
  3. [XSLT] Transformer le nom d'un attribut
    Par titchagui dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 01/12/2008, 10h53
  4. [XSLT] Transformer les noeuds enfants en attribut du premier noeud
    Par le_chomeur dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2008, 13h57
  5. [XSLT]Transformer une valeur d'attribut en élément
    Par heffer69 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/02/2008, 11h48

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