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 pour imbrication des balises [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut XSLT pour imbrication des balises
    Bonjour à tous,

    Je suis débutant en XSLT et je n'arrive pas à faire ce que je veux avec un xslt.

    Mon fichier XML :
    <Document>
    <DOC.MAIN NO="0001" >
    <PAGE.FIRST>12</PAGE.FIRST>
    <PAGE.LAST>12</PAGE.LAST>
    <PAGE.TOTAL>1</PAGE.TOTAL>
    <PAGE.SEQ>1</PAGE.SEQ>
    </DOC.MAIN>

    <DOC.SUB NO="0001.0001" >
    <PAGE.FIRST>13</PAGE.FIRST>
    <PAGE.LAST>14</PAGE.LAST>
    <PAGE.TOTAL>2</PAGE.TOTAL>
    </DOC.SUB>

    <DOC.SUB NO="0001.0001.0001" >
    <PAGE.FIRST>13</PAGE.FIRST>
    <PAGE.LAST>14</PAGE.LAST>
    <PAGE.TOTAL>2</PAGE.TOTAL>
    </DOC.SUB>

    <DOC.SUB NO="0001.0001.0001.0001" >
    <PAGE.FIRST>13</PAGE.FIRST>
    <PAGE.LAST>14</PAGE.LAST>
    <PAGE.TOTAL>2</PAGE.TOTAL>
    </DOC.SUB>

    </Document>
    Je veux un xslt pour avoir cet imbrication selon la hierarchy du NO pour avoir ce résultat:

    <Document>
    <DOC.MAIN NO="0001" >
    <PAGE.FIRST>12</PAGE.FIRST>
    <PAGE.LAST>12</PAGE.LAST>
    <PAGE.TOTAL>1</PAGE.TOTAL>
    <PAGE.SEQ>1</PAGE.SEQ>
    </DOC.MAIN>

    <DOC.SUB NO="0001.0001" >
    <PAGE.FIRST>13</PAGE.FIRST>
    <PAGE.LAST>14</PAGE.LAST>
    <PAGE.TOTAL>2</PAGE.TOTAL>
    <DOC.SUB NO="0001.0001.0001" >
    <PAGE.FIRST>13</PAGE.FIRST>
    <PAGE.LAST>14</PAGE.LAST>
    <PAGE.TOTAL>2</PAGE.TOTAL>
    <DOC.SUB NO="0001.0001.0001.0001" >
    <PAGE.FIRST>13</PAGE.FIRST>
    <PAGE.LAST>14</PAGE.LAST>
    <PAGE.TOTAL>2</PAGE.TOTAL>
    </DOC.SUB>
    </DOC.SUB>
    </DOC.SUB>
    </Document>


    J'ai essayé avec un for-each select, mais ça ne marche pas

    <xsl:template match="/">
    <DOCUMENT>

    <xsl:for-each select="//Document">
    <xsl:element name="DOC.PRIM">
    <xsl:variable name="NO">
    <xsl:value-of select="@NO"/>
    </xsl:variable>
    <xsl:variable name="x" select="//Document[@NO=$NO]"/>
    <xsl:element name="NO">
    <xsl:value-of select="$NO"/>
    </xsl:element>
    <xsl:element name="DOC.SUB">
    <xsl:value-of select="."/>
    </xsl:element>
    </xsl:for-each>


    </DOCUMENT>
    </xsl:template>


    JE VOUS REMERCIE D AVANCE POUR VOTRE AIDE

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Ce n'est pas apte comme problème pour un "grand" débutant - ça risque de mener des imaginations incorrectes en voyant une solution - vous êtes prévenu. Voici comment on peut y arriver en xslt 2.0.
    Code xslt2 : 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
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes" indent="yes" />
    <xsl:strip-space elements="*" />
     
    <xsl:template match="*|@*|text()">
        <xsl:copy>
            <xsl:apply-templates select="*|@*|text()" />
        </xsl:copy>
    </xsl:template>
     
    <xsl:template match="/">
        <xsl:apply-templates select="Document" />
    </xsl:template>
     
    <xsl:template match="Document">
        <xsl:copy>
            <xsl:apply-templates select="DOC.MAIN" />
        </xsl:copy>
    </xsl:template>
     
    <xsl:template match="DOC.MAIN">
        <xsl:copy>
            <xsl:apply-templates select="*|@*|text()" />
        </xsl:copy>
        <!-- xslt2 spécifique -->
        <xsl:variable name="rx" select="concat('^', @NO, '\.\d{4}$')" />
        <xsl:apply-templates select="/Document/DOC.SUB[matches(@NO, $rx)]" mode="special">
            <xsl:sort select="@NO" data-type="text" />
        </xsl:apply-templates>
        <!-- xslt2 spécifique -->
    </xsl:template>
     
    <xsl:template match="/Document/DOC.SUB" mode="special">
        <xsl:copy>
            <xsl:apply-templates select="*|@*|text()" />
            <!-- xslt2 spécifique -->
            <xsl:variable name="rx" select="concat('^', @NO, '\.\d{4}$')" />
            <xsl:apply-templates select="/Document/DOC.SUB[matches(@NO,$rx)]" mode="special">
                <xsl:sort select="@NO" data-type="text" />
            </xsl:apply-templates>
            <!-- xslt2 spécifique -->
        </xsl:copy>
    </xsl:template>
     
    </xsl:stylesheet>

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, ça marche

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

Discussions similaires

  1. XSLT : Comment afficher des balises XML dans un attribut ?
    Par mr.mams dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 27/04/2009, 15h36
  2. [RegEx] Problème pour fermer des balises
    Par Miaou le chat thon dans le forum Langage
    Réponses: 4
    Dernier message: 26/01/2009, 10h48
  3. [RegEx] expression régulière pour remplacer des balises
    Par oceanbigone dans le forum Langage
    Réponses: 5
    Dernier message: 29/05/2007, 18h11
  4. Réponses: 2
    Dernier message: 27/02/2007, 09h16
  5. [XSLT][>HTML]Affiché des balises HTML
    Par tiboel dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/06/2006, 20h15

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