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] Regroupement d'attribut


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut [XSLT] Regroupement d'attribut
    Bonjour,

    Je suis nouveau sur le forum, j'aimerai vous soumettre un problème sur lequel je penche depuis 2 heures. N'étant pas spécialiste dans le domaine je fais appel à vos compétences !

    J'aimerai regrouper plusieurs elements et attributs ensemble comme ceux-ci:

    Le fichier de départ:

    <spawn map="210050000" npcid="400325" pool="1" interval="295">
    <object x="608.28186" y="1676.9269" z="340.22418" h="0"/>
    </spawn>
    <spawn map="210050000" npcid="400325" pool="1" interval="295">
    <object x="1682.6425" y="1849.335" z="263.45734" h="0"/>
    </spawn>
    <spawn map="210050000" npcid="400325" pool="1" interval="295">
    <object x="889.46539" y="1820.2402" z="335.85309" h="0"/>
    </spawn>

    <spawn map="210050000" npcid="400213" pool="1" interval="295">
    <object x="151.64667" y="427.91653" z="592.3017" h="0"/>
    </spawn>
    <spawn map="210050000" npcid="400213" pool="1" interval="295">
    <object x="111.29594" y="1331.0725" z="376.35284" h="0"/>
    </spawn>
    <spawn map="210050000" npcid="400213" pool="1" interval="295">
    <object x="325.23514" y="503.58997" z="579.47473" h="0"/>
    </spawn>
    En ceux-ci:

    <spawn map="210050000" npcid="400325" pool="3 interval="295">
    <object x="608.28186" y="1676.9269" z="340.22418" h="0"/>
    <object x="1682.6425" y="1849.335" z="263.45734" h="0"/>
    <object x="889.46539" y="1820.2402" z="335.85309" h="0"/>
    </spawn>

    <spawn map="210050000" npcid="400213" pool="3" interval="295">
    <object x="151.64667" y="427.91653" z="592.3017" h="0"/>
    <object x="111.29594" y="1331.0725" z="376.35284" h="0"/>
    <object x="325.23514" y="503.58997" z="579.47473" h="0"/>
    </spawn>
    Si un spécialiste passe par là et qu'il veut bien m'aider, je lui en serai très reconnaissant.

    Cordialement,

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est une méthode Muench qu'il te faut. Le problème étant que là, la clé est composée de trois attributs, ce qui la rend un peu complexe.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:key name="groupe" match="spawn"
      use="concat(@map, '/', @npcid, '/', @interval)"/>
     
    <xsl:template match="/">
      <root>
        <!-- Tous les spawn de triplet @map, @npcid, @interval distincts : -->
        <xsl:apply-templates
          select="//spawn[generate-id(.) = generate-id(key('groupe', concat(@map, '/', @npcid, '/', @interval)))]"
          />
      </root>
    </xsl:template>
    Ensuite, dans le template ainsi appelé, plus qu'à sélectionner tous les <object> enfants d'un <spawn> qui a les mêmes attributs, et de les insérer tous comme enfants d'un seul spawn.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut
    Je suis entrain de chercher mais cela n'a pas l'air facile.
    En tout cas je vous remercie pour l'aide proposée !
    PS: J'avais deja vu cette méthode dans le tutos mais il me renvoie tout le temps <spawn> et rien d'autre.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut
    <spawns>
    <spawn map="210050000" npcid="400325" pool="1" interval="295">
    <object x="608.28186" y="1676.9269" z="340.22418" h="0"/>
    </spawn>
    <spawn map="210050000" npcid="400325" pool="1" interval="295">
    <object x="1682.6425" y="1849.335" z="263.45734" h="0"/>
    </spawn>
    <spawn map="210050000" npcid="400325" pool="1" interval="295">
    <object x="889.46539" y="1820.2402" z="335.85309" h="0"/>
    </spawn>

    <spawn map="210050000" npcid="400213" pool="1" interval="295">
    <object x="151.64667" y="427.91653" z="592.3017" h="0"/>
    </spawn>
    <spawn map="210050000" npcid="400213" pool="1" interval="295">
    <object x="111.29594" y="1331.0725" z="376.35284" h="0"/>
    </spawn>
    <spawn map="210050000" npcid="400213" pool="1" interval="295">
    <object x="325.23514" y="503.58997" z="579.47473" h="0"/>
    </spawn>
    </spawns>
    Voila après modification:

    <?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"/>
    <xsl:key name="spawns" match="spawn"
    use="concat(@map, '/', @npcid, '/', @pool, '/', @interval)"/>

    <xsl:template match="/">
    <spawns>
    <!-- Tous les spawn de triplet @map, @npcid, @interval distincts : -->
    <xsl:apply-templates
    select="//spawn[generate-id(.) = generate-id(key('spawns', concat(@map, '/', @npcid, '/', @pool, '/', @interval)))]"
    />
    </spawns>
    </xsl:template>
    </xsl:stylesheet>
    Malheureusement cela me retourne:

    <?xml version="1.0" encoding="UTF-8"?>
    <spawns/>
    Si quelqu'un aurait une idée ^^

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ah, attention. Moi je réponds à ta question sur le regroupement, mais je fais pas tes devoirs.
    Si tu veux connaître le XSLT, apprends.
    Je t'ai donné un lien vers la méthode Muench, je t'ai montré comment définir la clé qui n'est pas évidente. Le reste je suppose que tu peux le déduire seul.

    Dans le code ci-dessus, il faut bien sûr ajouter le <template match="spawn"> et indiquer dedans ce qu'on fait de ces spawn sélectionnés.

    Le principe étant d'insérer un <spawn> avec les mêmes attributs, de compter et sélectionner les <objet> à mettre dedans, et de les mettre dedans.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Par défaut
    Pas de problème
    Je vais continuer de chercher parce que 8000 lignes à la main ça va être dur !

Discussions similaires

  1. [XSLT] Regrouper les noeuds en fonction d'un attribut
    Par Creuvard dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/12/2008, 11h31
  2. [XSLT] Regroupement et tri d'un XML selon un attribut
    Par tatemilio2 dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 25/01/2007, 11h18
  3. [XSLT]Regroupement par attribut.
    Par zserdtfg dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/12/2006, 11h35
  4. [XSLT] Affichage selon attribut
    Par Henry23 dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 30/06/2006, 09h49
  5. [XSLT] Dédoublonner des attributs
    Par 242 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 10/11/2005, 15h44

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