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 :

[XSL] Modifier la structure des paragraphes en préservant les balises contenues


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [XSL] Modifier la structure des paragraphes en préservant les balises contenues
    Bonjour,
    Ma trop légère expérience en matière de transformation XSL me fait buter sur ce problème. C'est pourquoi je me permets de vous soumettre ma question ne serait-ce que pour obtenir une voie de solution à creuser.
    Mon objectif est de transformer un XML en un autre.
    Le premier (ma source) contient des paragraphes de texte contenant éventuellement des balises de mise en forme (gras, souligné etc.). Les paragraphes y sont structurés par des balises <p/> marquant le retour charriot.
    Je souhaite obtenir comme résultat ces mêmes alinéas mais contenus dans une paire de balises <P> ... </P>.
    Ce qui me pose une difficulté sont les balises de mise en forme présentes dans les texte, que je dois préserver.

    Exemple:
    La Source:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <TextElement>
    Lorem ipsum dolor sit amet, <b>consectetuer </b>adipiscing elit. Morbi ipsum. Duis suscipit lectus ut dolor. <u>Aenean pede turpis</u>, posuere ac, tempus id, semper a, leo.<p/>
    <b>Donec sit amet tortor non leo placerat suscipit. </b><p/>
    Nulla sodales, lectus sed commodo vestibulum, turpis dui tincidunt risus, in lacinia mi enim vel mauris. Suspendisse ultrices consequat lacus.<p/>
    Sed faucibus purus pretium erat.<p/>Curabitur venenatis. <p/>
    Praesent hendrerit bibendum enim. Nullam lectus.
    </TextElement>
    Le résultat escompté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <TextElement>
    <P>Lorem ipsum dolor sit amet, <b>consectetuer </b>adipiscing elit. Morbi ipsum. Duis suscipit lectus ut dolor. <u>Aenean pede turpis</u>, posuere ac, tempus id, semper a, leo.</P>
    <P><b>Donec sit amet tortor non leo placerat suscipit. </b></P>
    <P>Nulla sodales, lectus sed commodo vestibulum, turpis dui tincidunt risus, in lacinia mi enim vel mauris. Suspendisse ultrices consequat lacus.</P>
    <P>Sed faucibus purus pretium erat.</P><P>Curabitur venenatis. </P>
    <P>Praesent hendrerit bibendum enim. Nullam lectus.</P>
    </TextElement>
    Je parviens à obtenir alternativement:
    • soit les paragraphes correctement structurés mais sans les balises de mise en forme
    • soit les paragraphes correctement structurés ainsi que les balises de mise en forme, mais ces balises de mise en forme génèrent systématiquement un nouveau paragraphe qui les contient. J'ai donc des paragraphes en surnombre.


    Merci de vos aides et conseils par avance.

  2. #2
    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,

    la méthode consistant à placer des "marqueurs" XML comme <p/> pour marquer le début et la fin de structures étant ce qui peut se faire de pire en matière de schéma XML, je comprends que tu cherches à rétablir la situation.

    Le principe général serait de créer un template <p> qui crée un <P> et y recopier tous les noeuds qui précèdent le <p> courant et qui ont le <p> courant comme "premier" <p> dans l'ordre du document. Ensuite, il faut traiter les noeuds éventuels situés après le dernier <p> présent, et qui ne seront pas traités par le template.

    Ce qui donne :
    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:template match="TextElement[not(p)]">
      <xsl:copy-of select="."/>
    </xsl:template>
    <xsl:template match="TextElement">
      <xsl:copy>
        <xsl:apply-templates select="p"/>
        <xsl:if test="p[last()]/following-sibling::node() != ''">
          <P><xsl:copy-of select="p[last()]/following-sibling::node()"/></P>
        </xsl:if>
      </xsl:copy>
    </xsl:template>
    <xsl:template match="p">
      <P><xsl:copy-of select="preceding-sibling::node()[not(self::p) and generate-id(following-sibling::p[1]) = generate-id(current())]"/></P>
    </xsl:template>

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour Grand Father,

    Un grand merci à toi d'une part, pour m'avoir fourni la solution à mon problème, et d'autre part, pour l'avoir fait si rapidement !

    Effectivement, je ne parvenais pas à mettre le doigt sur un traitement "modèle" tout en prenant en compte les cas des premier et dernier paragraphes.

    PS: pour la petite histoire, ce formatage de paragraphes assez peu élégant est le résultat d'un logiciel déjà un peu ancien qui ânonne du "xml" caractère par caractère...

    Salutations respectueuses

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

Discussions similaires

  1. [SP-2013] Modifier la structure des sous-sites
    Par liliwol dans le forum SharePoint
    Réponses: 2
    Dernier message: 15/10/2014, 07h21
  2. [RegEx] Remplacer URL par des liens sauf dans les balises
    Par raph37 dans le forum Langage
    Réponses: 7
    Dernier message: 19/10/2013, 19h31
  3. Vérification structure des tables utilisée dans les jobs
    Par jollt dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 05/01/2010, 15h03
  4. Modifier la structure des colonnes d'une table
    Par alonsyl dans le forum Modélisation
    Réponses: 1
    Dernier message: 04/10/2008, 14h10

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