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] convertir Element vers attribut


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut [XSLT] convertir Element vers attribut
    Bonjour,

    je suis débutante aussi je me permets de solliciter votre aide pour ce cas :

    J'ai un flux de cette forme :

    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
    <hotel>
    <id_carte>5655</id_carte>
    <login_carte>name</login_carte>
    <adresse_carte>address</adresse_carte>
    <cp_carte>zip</cp_carte>
    <ville_carte>city_hotel</ville_carte>
    <pays_carte>pays</pays_carte>
    <class_carte>class</class_carte>
    <prix_min_carte>0</prix_min_carte>
    <prix_max_carte>0</prix_max_carte>
    <nb_room_carte>0</nb_room_carte>
    <longitude_carte>longitude</longitude_carte>
    <latitude>latitude</latitude>
    <url_carte>hotel_url</url_carte>
    <img_carte>photo_url</img_carte>
    <desc_carte>desc_fr</desc_carte>
    <ville_pref_carte>city_preferred</ville_pref_carte>
    </hotel>
    et j'aimerais transformer mes éléments de mon flux en attribut.
    j'ai vu que xslt le permettait mais je ne sais pas comment faire =(

    jai vu sur cette discussion que ce bout de code permet de transformer des éléments en attribut... mais comment faire l'inverse ??=(

    merci d'avance car je ne sais vraiment pas comment faire =( je passe mes soirées dessus et je n'y 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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
    	<xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
    	<xsl:strip-space elements="*"/>
    	<xsl:template match="parameters">
    			<xsl:copy>
    				<xsl:apply-templates/>
    			</xsl:copy>
    	</xsl:template>
    	<xsl:template match="*">
    		<xsl:copy>
    			<xsl:for-each select="@*">
    				<xsl:element name="{name()}">
    					<xsl:value-of select="."/>
    				</xsl:element>
    			</xsl:for-each>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
    </xsl:stylesheet>

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Si j'ai bien compris la demande et que le fichier XML ressemble à
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <hotels>
    	<hotel>
    		<id_carte>5655</id_carte>
    		<login_carte>name</login_carte>
    		<adresse_carte>address</adresse_carte>
    		<cp_carte>zip</cp_carte>
    		<ville_carte>city_hotel</ville_carte>
    		<pays_carte>pays</pays_carte>
    		<class_carte>class</class_carte>
    		<prix_min_carte>1</prix_min_carte>
    		<prix_max_carte>0</prix_max_carte>
    		<nb_room_carte>0</nb_room_carte>
    		<longitude_carte>longitude</longitude_carte>
    		<latitude>latitude</latitude>
    		<url_carte>hotel_url</url_carte>
    		<img_carte>photo_url</img_carte>
    		<desc_carte>desc_fr</desc_carte>
    		<ville_pref_carte>city_preferred</ville_pref_carte>
    	</hotel>
    	<hotel>
    		<id_carte>5656</id_carte>
    		<login_carte>name</login_carte>
    		<adresse_carte>address</adresse_carte>
    		<cp_carte>zip</cp_carte>
    		<ville_carte>city_hotel</ville_carte>
    		<pays_carte>pays</pays_carte>
    		<class_carte>class</class_carte>
    		<prix_min_carte>2</prix_min_carte>
    		<prix_max_carte>0</prix_max_carte>
    		<nb_room_carte>0</nb_room_carte>
    		<longitude_carte>longitude</longitude_carte>
    		<latitude>latitude</latitude>
    		<url_carte>hotel_url</url_carte>
    		<img_carte>photo_url</img_carte>
    		<desc_carte>desc_fr</desc_carte>
    		<ville_pref_carte>city_preferred</ville_pref_carte>
    	</hotel>
    </hotels>
    le programme pourrait être
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
    <xsl:strip-space elements="*"/>
     
    <xsl:template match="hotels">
    	<xsl:element name="{name()}">
    		<xsl:apply-templates/>
    	</xsl:element>
    </xsl:template>
     
    <xsl:template match="hotel">
    	<xsl:element name="{name()}">
    		<xsl:for-each select="child::*">
    			<xsl:attribute name="{name()}">
    				<xsl:value-of select="."/>
    			</xsl:attribute>
    		</xsl:for-each>
    	</xsl:element>
    		<xsl:apply-templates/>
    </xsl:template>
     
    <xsl:template match="node()">
    	<xsl:apply-templates/>
    </xsl:template>
     
    </xsl:stylesheet>

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut
    Bonjour,


    tout d abord merci pour ta reponse c'est vraiment très gentil à toi de m'aider

    par contre jai un problème =( quand j'intègre ton script il me met :

    Erreur d'analyse XML : données incompréhensibles après l'élément de document
    Emplacement : http://www.casualgamer.fr/projet/wp-...9/xml/test.xml
    Numéro de ligne 44, Colonne 1 :<casualgamer>
    ^

    Je ne comprend vraiment pas =( car j'ai vraiment repris ton script jai juste changé le nom du tronc

    ci joint lurl du flux en ligne=(

    http://www.casualgamer.fr/projet/wp-...9/xml/test.xml


    est ce que tu as une idée sur la question??


    Encore merci d'avance!!

  4. #4
    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
    Grand débutant non ?

    Si tu veux utiliser un xslt sur un xml il ne faut pas tout mettre dans le même fichier.
    1) tu dois creer un fichier xslt qui contiendra

    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="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    	<xsl:strip-space elements="*"/>
    	<xsl:template match="casualgamer">
    		<xsl:element name="{name()}">
    			<xsl:apply-templates/>
    		</xsl:element>
    	</xsl:template>
    	<xsl:template match="carte_france">
    		<xsl:element name="{name()}">
    			<xsl:for-each select="child::*">
    				<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
    			</xsl:for-each>
    		</xsl:element>
    		<xsl:apply-templates/>
    	</xsl:template>
    	<xsl:template match="node()">
    		<xsl:apply-templates/>
    	</xsl:template>
    </xsl:stylesheet>
    Si cela doit s'ouvrir avec un seul navigateur, sauvegarde ce fichier en .xml et non en .xslt car firefox n'aime (ait?) pas trop les autres extensions.

    Ensuite 2 possibiltés
    Soit tu as un fichier xml et tu peux faire la liaison en dur en ajoutant
    <?xml-stylesheet type="text/xsl" href="chemin et nom du fichier"?>.

    Dans l'exemple qui suit le xslt est situé sur le même répertoire que le xml et je n'utilisant pas firefox je n'ai pas utilisé l'extension .xml mais .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
    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="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="casual.xslt"?>
    <casualgamer>
    	<!-- Table carte_france -->
    	<carte_france>
    		<id_carte>5655</id_carte>
    		<login_carte>name</login_carte>
    		<adresse_carte>address</adresse_carte>
    		<cp_carte>zip</cp_carte>
    		<ville_carte>city_hotel</ville_carte>
    		<pays_carte>pays</pays_carte>
    		<class_carte>class</class_carte>
    		<prix_min_carte>0</prix_min_carte>
    		<prix_max_carte>0</prix_max_carte>
    		<nb_room_carte>0</nb_room_carte>
    		<longitude_carte>longitude</longitude_carte>
    		<latitude>latitude</latitude>
    		<url_carte>hotel_url</url_carte>
    		<img_carte>photo_url</img_carte>
    		<desc_carte>desc_fr</desc_carte>
    		<ville_pref_carte>city_preferred</ville_pref_carte>
    	</carte_france>
    	<carte_france>
    		<id_carte>2</id_carte>
    		<login_carte>Hotel De Ange</login_carte>
    		<adresse_carte>4 Rue De La Gare</adresse_carte>
    		<cp_carte>68500</cp_carte>
    		<cp_carte_min>68</cp_carte_min>
    		<ville_carte>Guebwiller </ville_carte>
    		<pays_carte>France</pays_carte>
    		<class_carte>3</class_carte>
    		<prix_min_carte>45</prix_min_carte>
    		<prix_max_carte>90</prix_max_carte>
    		<nb_room_carte>36</nb_room_carte>
    		<longitude_carte>7,22</longitude_carte>
    		<latitude>47,91</latitude>
    		<url_carte>http://www.booking.com/hotel/fr/de-l-ange.html</url_carte>
    		<img_carte>http://www.booking.com/images/hotel/org/823/823851.jpg</img_carte>
    		<desc_carte>L'hrestaurant est situx pieds des Vosges, sur la route du vin, uebwiller, en Alsace, entre Colmar et Mulhouse.</desc_carte>
    		<ville_pref_carte>Guebwiller</ville_pref_carte>
    	</carte_france>
    </casualgamer>
    Soit c'est flux dynamique et dans ce cas là il faut passer par du code pour faire la liaison exemple ici

    http://xml.developpez.com/sources/?p...ansfo_PHP_XSLT

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut merci beaucoup , promis je vais y arriver ^^
    merci beaucoup pour ta reponse !!

    donc j'ai fai comme tu m'a dit, j'ai mis ton code sur un fichier xslt a part
    et j'ai rajouté le lien dans mon flux ^^

    par contre maintenant j'ai une page blanche , je dois être plus que nulle mais je comprend pas=(

    http://www.casualgamer.fr/projet/wp-...9/xml/test.xml

    PS : mon flux xml et xslt sont au même niveau dans mon fichier


    merci d'avance en esperant que se soit la dernière fois ^^

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Le code fourni produit du XML, pour un affichage sur un navigateur il faut écrire une conversion HTML.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut ultime question
    merci beaucoup deja ^^

    par contre ultime question :p .
    Le flux que tu as vu ne contenait que deux 3-4 produit.
    Le final que je vais utiliser aura la meme structure mais il en contiendra plus de 5000.

    pour la petite histoire mon but est dintegrer le flux ayant la nouvelle structure dans un flash. (l'action script m'ayant obligé a changer mes element en attribut... dou mon post ^^)

    pour mon flux test il ny a pas de problème je pouvais faire dans firefox => voir le code source généré , récupérer le nouveau flux avec la nouvelle structure ^^

    mais voila=( comme le flux final est lourd et contient enormement de produit quand je fais voir le code source généré dans firefox pour recupérer le nouveau flux il plante =((((

    aurait tu une idée sur la question pour recupérer l'apparence du nouveau flux ??

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Il faut travailler en ligne de commande et produire une sortie dans un fichier.
    Voir la syntaxe dans la doc du processeur XSLT utilisé.

Discussions similaires

  1. [XSLT] Conversion xml vers txt ou mdb etc
    Par narodar dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/06/2006, 15h31
  2. [XSLT]Sort sur un attribut dont la valeur est en param
    Par Trin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 07/11/2005, 17h16
  3. [XSLT] navigateur vogue vers sa source
    Par totobouchon dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 15/07/2005, 16h39
  4. [XSLT] XML->XML conversion attributs en balises
    Par ¤ Actarus ¤ dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/07/2005, 10h51
  5. [C#] Fonction pour convertir string[] vers ArrayList
    Par luimême dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/04/2005, 14h25

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