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 :

Balises identiques XML à traiter en XLST


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Points : 336
    Points
    336
    Par défaut Balises identiques XML à traiter en XLST
    Bonsoir,

    je n'arrive pas à trouver le truc pour pouvoir dire à XSLT qu'il y a deux balises identiques dans le xml et qu'il doit les traiter l'un après l'autre. value-of select ne semble pas marcher... J'ai trois balises <nom> pour trois champs different à mapper pour le meme utilisateur

    Voici l'XML à transformer

    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
     
    <SALARIE>
        <CODESALARIE>74144</CODESALARIE>
        <CIVILITE>Mr</CIVILITE>
        <NOM>ARABIE</NOM>
        <PRENOM>Laurence</PRENOM>
        <EMPLOYEUR>
            <SOCIETE>
                <CODESOCIETE>31489</CODESOCIETE>
                <NOM>BMW<NOM>
            </SOCIETE>
        </EMPLOYEUR>
        <TELEPHONE_FIXE>01 41111111</TELEPHONE_FIXE>
        <EMAIL>e.abszaszadie@aafl.fr</EMAIL>
        <FONCTION>
            <FONCTION_AUGURE>
            <CODE>1061</CODE>
            <NOM>Ecrivain</NOM>
            </FONCTION_AUGURE>
        </FONCTION>
    </SALARIE>
    Et voici l'output souhaité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <field name="nom_1">ARABIE</field>
    <field name="prenom">Laurence</field>
    <field name="codesociete">31489</field>
    <field name="nom_2">BMW</field> <!-- deuxieme nom, celui de la société ... -->
    etc...

    Merci beaucoup, je suis sur que cela doit être simple, mais je n'arrive pas à trouver sur le net comment differencier les deux par le systeme

    Merci beaucoup
    Avant de poster consultez la recherche avancée du forum
    N'oubliez pas le bouton

    Formation LaTeX et Outils Pratiques

    C'est ce que nous pensons déjà connaître qui nous empêche souvent d'apprendre.

  2. #2
    Membre averti
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Points : 336
    Points
    336
    Par défaut
    Bonsoir,

    je crois avoir isolé le problème, voici mon fichier XSLT.

    Voici la partie qui marche bien :

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
        <!-- Header for Data Import Transformation-->    
        <xsl:template match="DATA">
            <xsl:element name="FMRequest">
                <xsl:element name="Origin">
                    <xsl:text>UserVIP</xsl:text>
                </xsl:element >
                <xsl:element name="Destination">
                    <xsl:text>FI</xsl:text>
                </xsl:element >
                    <xsl:apply-templates>
                    </xsl:apply-templates>                
            </xsl:element>
        </xsl:template>    
     
            <xsl:template match="DATA/SALARIE">
            <xsl:element name="Transaction">
                <xsl:attribute name="Type">    <xsl:text>UpdateAdd</xsl:text></xsl:attribute>
     
                <xsl:element name="BusinessObjectList">
                    <xsl:element name="BusinessObject">
                        <xsl:attribute name="Name"><xsl:text>Profile.Employee</xsl:text></xsl:attribute>
                        <xsl:element name="FieldList">
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>LastName</xsl:text></xsl:attribute>
                                <xsl:value-of select="NOM"></xsl:value-of>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>FirstName</xsl:text></xsl:attribute>
                                <xsl:value-of select="PRENOM"></xsl:value-of>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>Team</xsl:text></xsl:attribute>
                                <xsl:text>N/A</xsl:text>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>NetworkUserName</xsl:text></xsl:attribute>
                                <xsl:value-of select="concat(PRENOM,'.',NOM)"></xsl:value-of>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>IVRPincode</xsl:text></xsl:attribute>
                                <xsl:value-of select="CODESALARIE"></xsl:value-of>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>LoginID</xsl:text></xsl:attribute>
                                <xsl:value-of select="concat(PRENOM,'.',NOM)"></xsl:value-of>
                            </xsl:element >
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>Title</xsl:text></xsl:attribute>
                                <xsl:value-of select="NOM[2]"></xsl:value-of>
                            </xsl:element >
     
                            <!--<xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>AUG_CompanyCode</xsl:text></xsl:attribute>
                                <xsl:value-of select="CODESOCIETE"></xsl:value-of>
                            </xsl:element >-->
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>[EmployeeContainsAddress,Profile.Employee.PrimaryEmailLink]Address.Email.Purpose</xsl:text></xsl:attribute>
                                <xsl:text>Primary</xsl:text>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>[EmployeeContainsAddress,Profile.Employee.PrimaryEmailLink]Address.Email.Email</xsl:text></xsl:attribute>
                                <xsl:value-of select="EMAIL"></xsl:value-of>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>[EmployeeContainsAddress,Profile.Employee.Phone1Link]Address.Phone.Purpose</xsl:text></xsl:attribute>
                                <xsl:text>Work</xsl:text>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>[EmployeeContainsAddress,Profile.Employee.Phone1Link]Address.Phone.Phone</xsl:text></xsl:attribute>
                                <xsl:value-of select="TELEPHONE_FIXE"></xsl:value-of>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>[EmployeeContainsAddress,Profile.Employee.Phone2Link]Address.Phone.Purpose</xsl:text></xsl:attribute>
                                <xsl:text>Mobile</xsl:text>
                            </xsl:element>
     
                            <xsl:element name="Field">
                                <xsl:attribute name="Name"><xsl:text>[EmployeeContainsAddress,Profile.Employee.Phone2Link]Address.Phone.Phone</xsl:text></xsl:attribute>
                                <xsl:value-of select="TELEPHONE_MOBILE"></xsl:value-of>
                            </xsl:element>
     
                        </xsl:element> <!-- Field List -->
     
     
                            <xsl:element name="RelatedBusinessObjectList">
                                                <xsl:element name="BusinessObject">
                                                        <xsl:attribute name="Name"><xsl:text>AUG_Company</xsl:text></xsl:attribute>
                                                        <xsl:attribute name="Link"><xsl:text>AUG_CompanyLink</xsl:text></xsl:attribute>
                                                        <!--<xsl:attribute name="Relation"><xsl:text>AUG_CompanyAssociatedCIAUG_TechConf</xsl:text></xsl:attribute>-->
                                                            <xsl:element name="FieldList">
                                                                <xsl:element name="Field">
                                                                    <xsl:attribute name="Name"><xsl:text>AUG_CompanyCode</xsl:text></xsl:attribute>
                                                                    <xsl:attribute name="identifier">
    ICI J'aimerais bien qu'il point sur la feuille SOCIETE et sur la sous feuille CODESOCIETE
    sachant que l'arbre est construit de cette manière : DATA/SALARIE/SOCIETE/ ou DATA/SALARIE/FONCTION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <xsl:text>true</xsl:text></xsl:attribute>
                                                                    <xsl:value-of select="SOCIETE.CODESOCIETE"></xsl:value-of> 
                                                                </xsl:element >                    
                                                            </xsl:element >    
                                                </xsl:element >    
                            </xsl:element >    
                    </xsl:element>
                </xsl:element>
            </xsl:element>
        </xsl:template>    
     
     
    </xsl:stylesheet>
    Merci pour celui qui pourrait m'expliquer comment me balader dans l'arborescence d'un fichier XSLT, des heures dessus et je tourne en rond... Si je remplace la valeur par 4990 (id d'une societe liée dans ma BDD), tout fonctionne bien...
    Avant de poster consultez la recherche avancée du forum
    N'oubliez pas le bouton

    Formation LaTeX et Outils Pratiques

    C'est ce que nous pensons déjà connaître qui nous empêche souvent d'apprendre.

  3. #3
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Salut,
    Citation Envoyé par Konrad Florczak Voir le message
    Merci pour celui qui pourrait m'expliquer comment me balader dans l'arborescence d'un fichier XSLT, des heures dessus et je tourne en rond...
    La technique pour naviguer dans un document XML, et qui donne toute sa puissance à XSLT, s'appelle XPath. Ce langage, dont la syntaxe rappelle un peu celle d'un chemin dans un système de fichiers, permet de sélectionner n'importe quel noeud d'un document XML. C'est un langage assez puissant, parfois subtile, mais le maîtriser c'est maîtriser 80% de XSLT. On peut utiliser XPath sans XSLT, beaucoup de langages disposent d'une librairie XPath pour faciliter le parcours des documents XML.

    Pour ce qui concerne ton problème immédiat, voici une des solutions possibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:template match="DATA/SALARIE">
      ...
      <field name="nom_1"><xsl:value-of select="NOM" /></field>
      <field name="prenom"><xsl:value-of select="PRENOM" /></field>
      <field name="codesociete"><xsl:value-of select="EMPLOYEUR/SOCIETE/CODESOCIETE" /></field>
      <field name="nom_2"><xsl:value-of select="EMPLOYEUR/SOCIETE/NOM" /></field>  
      ...
    </xsl:template>
    Les expressions XPath contenues dans les attributs select sont des expressions relatives, et elles le sont par rapport au noeud courant (ici un noeud SALARIE). A noter que le pattern contenu dans l'attribut match est également une expression XPath, utilisant toutefois une syntaxe réduite.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  4. #4
    Membre averti
    Avatar de Konrad Florczak
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 242
    Points : 336
    Points
    336
    Par défaut
    Je tenais à te remercier pour ta réponse grandfather, je l'ai effectivement découvert à taton cette nuit en essayant de récupérer les données !

    Avant de poster consultez la recherche avancée du forum
    N'oubliez pas le bouton

    Formation LaTeX et Outils Pratiques

    C'est ce que nous pensons déjà connaître qui nous empêche souvent d'apprendre.

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

Discussions similaires

  1. XML et récupération de balises identiques
    Par vince62fr dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 20/04/2012, 08h30
  2. [XL-2007] Extraire des données d'un fichier Xml avec des balises identiques
    Par Danieldu54 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/03/2011, 20h45
  3. Xml avoir deux balise identique au meme niveau/noeud ?
    Par zeonnix95 dans le forum Général Python
    Réponses: 3
    Dernier message: 24/08/2010, 12h00
  4. [XSLT] probleme de copie de balise de XML vers HTML via XSL
    Par Clercq dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/11/2006, 13h52
  5. balises identiques
    Par Phmichel dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 28/10/2002, 09h18

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