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 :

Conversion XML exprésion régulière [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Homme Profil pro
    infographiste
    Inscrit en
    Avril 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : infographiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 41
    Par défaut Conversion XML exprésion régulière
    Bonjour,

    Je commence en XSLT voilà mon petit problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            <P>
                <cari>Cet article fait état d’une revue rapide et non exhaustive des</cari>
                <AppleNote>1</AppleNote>
            </P>
             …
             …
             …
             <NP><NoteN>1. </NoteN>Test</NP>
            <NP><NoteN>3. </NoteN>Ce <carsc>texte</carsc> a fait l’objet d’une <cari>communication</cari> lors du colloque consacré à l’alcoologie du 9 octobre 2010 de la Société royale de médecine légale de Belgique. Les références ont été mises à jour.</NP>
     
             …
    Je veux replacer le contenu de la balise "<AppleNote>1</AppleNote>" par le contenu de "NP" qui a comme enfant la balise <NoteN>1. </NoteN>?
    Donc faire un comparaison sur le contenu la balise "NoteN" et "AppleNote" pour déplacer.

    Pour arrivé à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            <P>
                <cari>Cet article fait état d’une revue rapide et non exhaustive des</cari>
                <NP>Test</NP>
            </P>

    Pour commencé en XSLT c'est pas facile!
    Merci

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    L'approche serrait la même sur le plan conceptuel xslt 1.0 ou xslt 2.0. Essayez cette esquisse si ça marche comme telle, ou sinon, l'intégrez d'après les templates en place.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xsl:template match="AppleNote">
        <xsl:apply-templates select="following-sibling::NP[number(NoteN)=number(current())]" mode="remplacement" />
    </xsl:template>
     
    <xsl:template match="NP" mode="remplacement">
        <xsl:copy>
            <xsl:for-each select="*[name()!='NoteN']|text()">
                <xsl:copy-of select="." />
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>
    Amendement 2012-10-11
    Cette ligne est corrigée.
    <xsl:apply-templates select="following-sibling::NP[number(NoteN)=number(.)]" mode="remplacement" />

  3. #3
    Membre averti
    Homme Profil pro
    infographiste
    Inscrit en
    Avril 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : infographiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 41
    Par défaut Nouveau code
    le résulta du code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Cet article fait état d’une revue rapide et non exhaustive des
     
    1. Test
    3. Ce texte a fait l’objet d’une communication lors du colloque consacré à l’alcoologie du 9 octobre 2010 de la Société royale de médecine légale de Belgique. Les références ont été mises à jour.
    Je repart sur un autre bout de fichier XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <r>
        <date>01/01/2000</date>
        <AppleNote>2</AppleNote>
        <date>01/02/2001</date>
        <NP><NoteN>1. </NoteN>One Notes
</NP>
        <NP><NoteN>2. </NoteN>Tow Notes
</NP>
        <NP><NoteN>5. </NoteN>La cinquième Test
</NP>
    </r>
    voici le code que j'ai tenté d'écrire pour déplacer la note à l'emplacement dans le text.

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
        <!--<xsl:output method="text"/>-->
     
        <xsl:template match="/">
           <test>
             <xsl:variable name="res">
                    <xsl:call-template name="CompNote3">
                        <xsl:with-param name="AppleNote1" select='r/AppleNote'/>  
                    </xsl:call-template>
                </xsl:variable>
     
               <!-- La je voudrais test si re retoure de la fonction et bien différent de la variable passé en paramettre "$rem"       -->
               <xsl:if test="$res != '0'"> 
                <xsl:value-of select="$res"/>
                   - la date <xsl:value-of select="r/date[2]"/>
               </xsl:if>
           </test>
        </xsl:template>
     
     
        <xsl:template name="CompNote3">
            <xsl:param name="AppleNote1"/>
            <!--<xsl:copy>-->
                <xsl:for-each select="r/NP/NoteN">
                    <!-- là je voudrais faire un test pour compare le numero dans NoteN avec la variable $AppleNote1
                    et  si c'est vrai de retourné le texte de NP correspondant -->
                    <xsl:value-of select="$AppleNote1"/>
     
                </xsl:for-each>
       </xsl:template> 
    </xsl:stylesheet>
    et je voudrais arrivé à ce résulta là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <test>
        <date>01/01/2000</date>
        <NP>Tow Notes
</NP>
        <date>01/02/2001</date>
        <NP><NoteN>1. </NoteN>One Notes
</NP>
        <NP><NoteN>5. </NoteN>La cinquième Test
</NP>
    </test>
    Merci pour votre aide

    liphou

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Quelque chose comme ça sauf toujours quelque détail: comme de la représentation lexique des entités de caractère qu'on ne peut que tolérer une forme résultante qui soit d'ailleurs sémantiquement équivalente, et comme des espaces vides ignorables formattés un peu différamment etc.
    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 version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8" indent="yes" />
    <xsl:strip-space elements="*" />
    <xsl:template match="*|@*|text()">
        <xsl:copy>
            <xsl:apply-templates select="*|@*|text()" />
        </xsl:copy>
    </xsl:template>
     
    <xsl:template match="AppleNote">
        <xsl:apply-templates select="following-sibling::NP[number(NoteN)=number(current())]" mode="remplacement" />
    </xsl:template>
     
    <xsl:template match="NP[number(NoteN)=number(preceding-sibling::AppleNote)]" />
     
    <xsl:template match="NP" mode="remplacement">
        <xsl:copy>
            <xsl:for-each select="*[name()!='NoteN']|text()">
                <xsl:copy-of select="." />
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>
    </xsl:stylesheet>
    PS Je dois corriger mon message précédant: au lieu de mettre un point, je dois l'écrire commen current(). Ceci est aussi montré correctement dans ce message. Et je vais le faire dans une seconde.

  5. #5
    Membre averti
    Homme Profil pro
    infographiste
    Inscrit en
    Avril 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : infographiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 41
    Par défaut
    Merci Tsuji pour ces Code.

    si je change le texte XML comme ceci :
    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
     
    <r>
        <date>01/01/2000</date>
        <AppleNote>1</AppleNote>
        <date>01/01/2000</date>
        <AppleNote>2</AppleNote>
        <date>01/02/2001</date>
        <AppleNote>5</AppleNote>
        <date>01/02/2001</date>
     
     
        <NP><NoteN>1. </NoteN>One Notes
</NP>
        <NP><NoteN>2. </NoteN>Tow Notes
</NP>
        <NP><NoteN>5. </NoteN>La cinquième Test
</NP>
    </r>
    le résulta est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <r>
       <date>01/01/2000</date>
       <NP>One Notes
</NP>
       <date>01/01/2000</date>
       <NP>Tow Notes
</NP>
       <date>01/02/2001</date>
       <NP>La cinquième Test
</NP>
       <date>01/02/2001</date>
       <NP>
          <NoteN>2. </NoteN>Tow Notes
</NP>
       <NP>
          <NoteN>5. </NoteN>La cinquième Test
</NP>
    </r>
    je ne comprend pas trop pour quoi il ne supprime pas les autre après les avoir placer?

    Dans les fichiers finaux :

    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
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <CH>
            <T>Alcool et molécules
</T>
            <P>Gérard <carsc>Charles</carsc></P>
            <P>Neuropsychiatre
Attaché Médecin Anthropologue – SPF Justice
</P>
            <RS>Cet article fait état d’une revue rapide et non exhaustive des traitements de
                l’alcoolisme.
</RS>
            <RS>Après une brève révision du traitement du sevrage aigu, nous nous sommes interrogés sur
                le concept de l’abstinence totale, l’utilité de diverses psychothérapies et de molécules
                dans l’abstinence.
</RS>
            <RS>Dit artikel geeft een algemeen en niet-exhaustief overzicht van de behandelingen van
                alcoholisme.
</RS>
            <RS>Na een korte herhaling van de behandelingen van acute ontwenning, buigen we ons over het
                concept van de volledige onthouding, het nut van diverse psychotherapieën en bepaalde
                moleculen bij de ontwenning.
</RS>
            <RS>This article gives a general andrough overview of alcoholism treatments.
</RS>
            <RS>After a short recapitulation of the treatments of detoxification, we discuss the concept
                of total abstinence and the use of the different types of psychotherapy and some kind of
                molecules in the treatment of abstinence.
</RS>
            <MC>Mots clés : Alcoolisme – Traitement médicamenteux – Psychiatrie – Psychothérapie –
                Sevrage –Toxicomanie – Décès
</MC>
            <MC>Trefwoorden : Alcoholisme – Behandeling met geneesmiddelen – Psychiatrie –
                Psychotherapie – Ontwenning – Verslaving – Overlijden
</MC>
            <MC>Keywords : Alcoholism – Drug treatment – Psychiatry – Psychotherapy – Detoxification –
                Addiction – Death
</MC>
            <T>Introduction
</T>
            <P>
                <cari>Cet article fait état d’une revue rapide et non exhaustive des</cari><AppleNote>1</AppleNote><cari></cari>
            </P>
            <P><cari>traitements de l’alcoolisme</cari><AppleNote>3</AppleNote><cari>.</cari></P>
            <P>Le DSM-IV (APA, 2003, pp. 245-246), pilier de la littérature diagnostique psychiatrique,
                recense, au chapitre des troubles liés à une substance, les troubles liés à l’alcool –
                dépendance, abus, intoxication, sevrage, <cari>delirium</cari>, démence – et les
                troubles associés – trouble psychotique, trouble de l’humeur, trouble anxieux, trouble
                du sommeil et dysfonctions sexuelles.<AppleNote>10</AppleNote></P>
            <P>Sur le plan des traitements pharmacologiques, impossible
</P>
            <P>de passer sous silence l’indispensable étape que l’alcoolique doit franchir, souvent à
                plusieurs reprises dans sa vie, lors de ses tentatives d’arrêt des consommations.
</P>
            <T>Sevrage
</T>
            <P>Le risque létal de l’arrêt, souvent brutal, des consommations ne doit pas être
                sous-estimé chez l’alcoolique. Cet aspect s’est révélé d’une importance particulière
                chez des personnes hospitalisées en urgence suite à un traumatisme ou chez de jeunes
                polytoxicomanes chez qui la dépendance à l’alcool était noyée dans un tableau d’abus de
                diverses substances (Chick, 1994). Il convient de ne pas se laisser abuser par les
                similitudes de la dépendance aux «*drogues*» dures ou douces, légalisées ou non, dont le
                sevrage, s’il est pénible, n’a jamais entraîné de décès, à l’inverse du sevrage de
                l’alcool.
</P>
            <P>Le schéma de traitement du sevrage aigu est maintenant
</P>
            <P>classique (McPherson A, 2012) et n’a guère varié depuis les années
</P>
            <P>1990 (Mayo-Smith, 1997). Si le rôle des benzodiazépines comme pilier du traitement
                pharmacologique a été contesté par les anticonvulsivants (Barrons R, 2010), il est
                actuellement bien établi (Dell’osso B, 2012).
</P>
            <P>Pour rappel, il suppose, sur une période de trois semaines,
</P>
            <P>le contrôle des paramètres biologiques classiques (par exemple : ionogramme, hématocrite,
                glycémie, enzymes) à deux reprises (∂), l’administration abondante de liquides, de sels
                et de sucre pendant les premiers jours et, durant deux semaines, la prise de vitamine B
                et d’une couverture en dose dégressive de benzodiazépines.
</P>
            <P></P>
            <NP><NoteN>1. </NoteN>Test
</NP>
            <NP><NoteN>3. </NoteN>Ce <carsc>texte</carsc> a fait l’objet d’une <cari>communication</cari>
                lors du colloque consacré à l’alcoologie du 9 octobre 2010 de la Société royale de
                médecine légale de Belgique. Les références ont été mises à jour.
</NP>
            <NP><NoteN>10</NoteN>Test 256</NP>
        </CH>
    Il ne se passe trop rien!!

    Mais je vais médité sur se code, pour parvenir à tous comprandre.

    Merci

  6. #6
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    <xsl:template match="NP[number(NoteN)=number(preceding-sibling::AppleNote)]" />
    Oui, la fonctionalité n'est pas pleinement remplie; c'est vrai! Voici une réécriture qui peut y porter remède.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template match="NP">
        <xsl:choose>
            <xsl:when test="preceding-sibling::AppleNote[number()=number(current()/NoteN)]">
                <!-- faire rien -->
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy-of select="." />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

  7. #7
    Membre averti
    Homme Profil pro
    infographiste
    Inscrit en
    Avril 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : infographiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 41
    Par défaut
    Merci Tsuji, je vais décortiqué le code.

  8. #8
    Membre averti
    Homme Profil pro
    infographiste
    Inscrit en
    Avril 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : infographiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 41
    Par défaut nœud
    Bonjour,
    Avec les pistes donner! et lu beaucoup de tuto, j'ai écrit ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <xsl:template match="AppleNote">
            <NP><P TYPE = "C">
                <xsl:for-each select="//NP[number(NoteN)=number(current())]">
                        <xsl:value-of select="substring(NoteN/parent::*, string-length(NoteN)+1, string-length(NoteN/parent::*))"/>
                </xsl:for-each>
            </P></NP>    
        </xsl:template>
    Mais! extraie du code XML qui me pose problème!! avec le XSLT, je paire le nœud (carsc) cela m'arrange pour (NoteN)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    <NP><NoteN>3. </NoteN>Ce <carsc>texte</carsc> a fait l’objet d’une
                    <cari>communication</cari> lors du colloque consacré à l’alcoologie du 9 octobre
                2010 de la Société royale de médecine légale de Belgique. Les références ont été mises à
                jour.
</NP>
    le résulta :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <NP><P TYPE="C">Ce texte a fait l’objet d’une
                    communication lors du colloque consacré à l’alcoologie du 9 octobre
                2010 de la Société royale de médecine légale de Belgique. Les références ont été mises à
                jour.
</P></NP>
    Une Piste me ferait très plaisir!!!

    Merci

  9. #9
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Mais! extraie du code XML qui me pose problème!! avec le XSLT, je paire le nœud (carsc) cela m'arrange pour (NoteN)
    Je n'ai pas bien compris ce que vous voulez...

    Vous voulez débarrasser NoteN, ça semble sûr. Vous voulez débarrasser les balises carsc et cari? ou non? et ne garder que leurs contenus textuels? Si vous voulez les garder, ce que j'ai proposé au titre d'exemple sera applicable comme tel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        <xsl:template match="AppleNote">
            <NP><P TYPE = "C">
                <xsl:for-each select="//NP[number(NoteN)=number(current())]">
                    <xsl:for-each select="*[name()!='NoteN']|text()">
                        <xsl:copy-of select="." />
                    </xsl:for-each>
                </xsl:for-each>
            </P></NP>    
        </xsl:template>
    En tout cas, je peux dire avec confiance, utilisant string-length() sur NoteN ou NoteN/parent::* serait bien problèmatique et fragile aux meilleurs des cas et tout à fait faute aux pires.

  10. #10
    Membre averti
    Homme Profil pro
    infographiste
    Inscrit en
    Avril 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : infographiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 41
    Par défaut
    Merci Tsuji,

    J'ai effectivement beaucoup de mal à faire passé mes idées, de mettre des mots sûr ce que je pence et encore plus de mal à les écrits mais je me débrouille ...

    Votre déduction est la bonne !
    la compréhension de XPath en deux jours pas simple mais vos code maide beaucoup à sa compréhension.

    En tout cas, je peux dire avec confiance, utilisant string-length() sur NoteN ou NoteN/parent::* serait bien problèmatique et fragile aux meilleurs des cas et tout à fait faute aux pires.
    Je suis tous à fais d'accord, c'est du bricolage, dans l’ignorance du langue mais je crée le code XML avec indesign (!!!! je contourne ces manquements) je savais à quoi m'attendre, mais avec Votre code voilà la bonne méthode, c'est autre chose un très grand merci!

    La suite dans d'autres post!

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

Discussions similaires

  1. [XSLT] Conversion xml vers txt ou mdb etc
    Par narodar dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/06/2006, 14h31
  2. [FOP] conversion XML en PDF sous JBuilder10
    Par belassel_z dans le forum APIs
    Réponses: 1
    Dernier message: 09/06/2006, 13h17
  3. librairie de conversion xml -> pdf
    Par qouify dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 08/05/2006, 09h10
  4. conversion XML vers OpenDocument
    Par eGGyyS dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 07/03/2006, 10h34
  5. [FOP] Problème de conversion xml/xsl vers pdf
    Par Shadow aok dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/03/2006, 10h41

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