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] Dédoublonner des attributs


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    242
    242 est déconnecté
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 11
    Points
    11
    Par défaut [XSLT] Dédoublonner des attributs
    Bonjour,

    Dans le cadre de manipulation de flux XML pouvant être complexes, je cherche à produire une feuille de style permettant, pour un fichier XML précisé, de produire la liste dédoublonnée de tous les noms d'attributs (et non leur valeur) pour une balise particulière...

    Et là, je bloque...

    Voici un exemple

    Fichier en entrée:
    <DOC>
    <PAG>
    <LIG ATT1="a" ATT2="b">....</LIG>
    <LIG ATT1="c" ATT3="d">....</LIG>
    </PAG>
    <PAG>
    <BLOC>
    <LIG ATT2="x" ATT5="d"></LIG>
    </BLOC>
    </PAG>
    </DOC>

    En sortie je souhaiterais avoir
    <LIG> ATT1 ATT2 ATT3 ATT4</LIG>

    Merci d'avance

  2. #2
    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 : 47
    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

  3. #3
    242
    242 est déconnecté
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Merci pour cette réponse,

    mais j'utilise cette méthode qui fonctionne bien pour dédoublonner les valeurs d'attributs.

    En revanche, je n'ai pas la syntaxe correcte pour dédoublonner les noms d'attributs

  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 : 47
    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
    C'est la meme, il te suffit de changer la valeur de la cle

  5. #5
    242
    242 est déconnecté
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Je suis paumé....
    voila mon bout de code, il me dédoublonne rien:

    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
     
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:key name="id" match="Id" use="."/>
        <xsl:template match="DOC">
            <xsl:element name="LIG">
                <xsl:for-each select="//LIG">
                <xsl:call-template name="LIG"/>
                </xsl:for-each>
            </xsl:element>
        </xsl:template>
     
            <xsl:template match="LIG" name="LIG">
           <!-- ici le test des doublons.... -->
                <xsl:for-each select="@*[generate-id()!=generate-id(key('id',current()))]">
                            <xsl:value-of select="name(current())"/>         
     
     
                     </xsl:for-each>
                <xsl:element name="test"></xsl:element>
     
             </xsl:template>
     
    </xsl:stylesheet>

  6. #6
    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 : 47
    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
    pas eu le temps de tester mais c'est l'idee


    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:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
        <xsl:key name="id" match="LIG/@*" use="name()"/> 
        <xsl:template match="DOC"> 
            <xsl:element name="LIG"> 
                <xsl:for-each select="//LIG/@*[generate-id(.)=generate-id(key('id',name(.))[1])"> 
     
                  <xsl:value-of select="concat(name(),' ')"/>     
                </xsl:for-each> 
            </xsl:element> 
        </xsl:template> 
     
     
    </xsl:stylesheet>

  7. #7
    242
    242 est déconnecté
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Nickel, a 2 caractères près, voici la version testée
    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:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:key name="id" match="LIG/@*" use="name()"/>
        <xsl:template match="DOC">
            <xsl:element name="LIG">
                <xsl:for-each select="//LIG/@*[generate-id(.)=generate-id(key('id',name())[1])]">
     
                    <xsl:value-of select="concat(name(),' ')"/>     
                </xsl:for-each>
            </xsl:element>
        </xsl:template>
     
     
    </xsl:stylesheet>
    Un grand merci

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

Discussions similaires

  1. [XSLT] ordre des attributs xml inversés
    Par manuaparis dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 09/12/2009, 10h44
  2. [XSLT] Extraire des attributs en croisant les données
    Par subuntug dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/10/2009, 09h57
  3. [XSLT] écrire des attribut dans une balise
    Par DrDam dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/04/2008, 13h12
  4. [débutante][XSLT] Afficher des attributs
    Par Lith6 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/11/2007, 23h30
  5. [XSLT] Dédoublonnement des items d'un fichier XML
    Par cydream dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 17/04/2007, 15h54

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