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 et Fusion de noeuds


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Points : 119
    Points
    119
    Par défaut [XSLT] regroupement et Fusion de noeuds
    bonjour...

    je recherche une facon propre et très rapide (le fichier réel contient plus de 900 noeuds...) d'effectuer ce qui suit.

    Fichier de depart (le nombre de noeuds varie)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <main><a/></main>
    <main><b/></main>
    <autre><main><test/></main></autre>
    <autre><main><titi><toto/></titi></main></autre>
    et je doit arriver à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <main><a/><b/></main>
    <autre><main><test/><titi><toto/></titi></test></main></autre>
    soit en XSLT soit en PHP (via DOM par exemple...)

    une idée...

    merci d'avance...

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    En xslt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="/">
        <main>
          <xsl:apply-templates select="//autre/main"></xsl:apply-templates>
        </main>
      </xsl:template>
     
      <xsl:template match="main">
        <xsl:copy-of select="*"/>
      </xsl:template>
    </xsl:stylesheet>
    Mais niveau perf le mieux serait de lire avec sax, mais je sais pas si c'est possible en php.

  3. #3
    Membre régulier Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Points : 119
    Points
    119
    Par défaut
    oui mais la tout est en dur..

    dans mon cas je ne connais le nom du noeud qu'au moment où je passe dessus... ; donc je ne peut mettre le nom d'un noeud dans la feuille XSL...

    faut que tout sois dynamique... d'où la difficulté...


  4. #4
    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
    Bonjour,

    Citation Envoyé par jacquesh
    faut que tout sois dynamique... d'où la difficulté...
    Où ça, une difficulté ?

    Voici une ébauche :
    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
    <?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:template match="/">
            <xsl:call-template name="recopie">
                <xsl:with-param name="fils" select="*"/>
            </xsl:call-template>
        </xsl:template>
        <xsl:template name="recopie">
            <xsl:param name="fils" />
            <xsl:for-each select="$fils">
                <xsl:variable name="nom-fils" select="name()"/>
                <xsl:if test="generate-id(.) = generate-id($fils[name() = $nom-fils][1])">
                    <xsl:element name="{name()}">
                        <xsl:call-template name="recopie">
                            <xsl:with-param name="fils" select="$fils[name() = $nom-fils]/*"/>
                        </xsl:call-template>
                    </xsl:element>
                </xsl:if>
            </xsl:for-each>
        </xsl:template>
    </xsl:stylesheet>
    Il est peut-être possible de faire plus concis (avis aux amateurs ), mais c'et de toute façon beaucoup plus court que ce que tu pourras faire avec DOM. Quant aux performances, c'est très difficile de se prononcer sans faire de test, l'intuition des développeurs est généralement assez mauvaise pour évaluer ce genre de chose...
    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

  5. #5
    Membre régulier Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Points : 119
    Points
    119
    Par défaut
    ca marche nikel !!

    merci beaucoup !!

    je vous tiendrai au courant en ce qui concerne les perfs pour les gros fichiers XML

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

Discussions similaires

  1. [XSLT] Regrouper des noeuds frêres
    Par topmas dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 16/06/2010, 16h20
  2. [XSLT] regroupement de noeud
    Par noobyyy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/12/2009, 00h15
  3. [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
  4. [XSLT] regrouper des noeuds identiques
    Par DelphLaga dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/11/2006, 17h07
  5. [XSLT] Regrouper les noeuds qui se ressemblent
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 19/10/2006, 16h51

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