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][MSXML] balise incomplète dans un xsl:template


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [XSL][MSXML] balise incomplète dans un xsl:template
    Bonjour,
    je voudrais pouvoir générer une élément XML dont la balise de début <monElt> serait générée dans un template, et la balise de fin dans un autre template.

    Par exemple
    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
     
    <?xml version="1.0"?>
    <?mso-application progid="Excel.Sheet"?>
    <!-- xsl tag  START -->
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" encoding="utf-8"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="/">
       <xsl:apply-templates select="/myNode" mode="Debut" />
       .... traitements
       <xsl:apply-templates select="/myNode" mode="Fin" />
    </xsl:template>
     
    <xsl:template match="myNode" mode="Debut">
       <monElt>
    </xsl:template>
    <xsl:template match="myNode" mode="Fin">
       </monElt>
    </xsl:template>
    Malheureusement le processeur XSLT génère deux erreurs equivalentes, une dans chaque template.
    Par exemple, pour le premier template :
    Le balise de fin xsl:template ne correspond pas à la balise de début monElt
    Le processeur XSLT semble considérer que la définition de template doit etre bien formée d'un point de vue XML.

    Je ne peux pas utiliser l'élément <xsl:element> pour generer l'element monElt
    car en resultat de <xsl:element> les deux balises debut et fin sont générées, empéchant d'insérer du texte.

    Y a-t-il un moyen en XSL d'ajouter en deux étapes différentes les deux balises début et fin d'un element XML de sortie?

    Merci d'avance pour votre aide

  2. #2
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Pour info j'ai trouvé une solution qui fonctionne bien avec MSXML.

    Il suffit d'utiliser l'élément xsl:text avec l'attribut disable-output-escaping="yes" et d'encoder les caractères < et > délimitant la balise :
    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
     
    ......
    <xsl:template match="myNode" mode="Debut">
    <!-- au lieu d'écrire directement <monElt> qui n'a pas la balise </monElt> dans 
           le même scope, on utilise l'élément xsl:text -->
    <!-- dans cet exemple, monElt contient un attribut name de valeur yacc
      <xsl:text disable-output-escaping="yes">
        &lt;monElt name="yacc" &gt;
      </xsl:text>
    </xsl:template>
    <xsl:template match="myNode" mode="Fin">
    <!-- même solution que pour le template ci-dessus pour la balise de fin -->
      <xsl:text disable-output-escaping="yes">
        &lt;/monElt&gt;
      </xsl:text>
    </xsl:template>
    Problème non résolu, mais dans mon cas je ne le rencontre pas, : cas où dans l'élément à définir, il y a des attributs dont la valeur contient le caractère &. Son codage par &amp; semble ne pas être correctement interprété

  3. #3
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    C'est vraiment un principe de XSL-T que d'avoir une feuille de style qui est elle-même un document XML bien formé.

    Quand on débute avec XSL-T, on prend cela pour une restriction mais, à l'usage, on s'aperçois que c'est une autre façon de concevoir ses traitements que je qualifierais de "logique" : XSL-T ne s'utilise pas comme un L3G, il faut toujours réfléchir (c'est parfois prise de tête...) plutôt que "pisser du code" .

    Je serais très étonné que votre problème ne trouve pas de solution XSL-T "propre".

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'utilise XSL-T pour créer un document EXCEL 2003 : le XSL de départ est le XML produit par EXCEL, sur un document"modèle" avec des cellules "tagées" pour pouvoir les retrouver dans le XSL.

    Mon problème est qu'en fonction des données d'entrée, disponibles également en XML, certaines parties du document EXCEL doivent disparaitre/apparaître (le document eXCEL de sortie est en quelque sorte dynamique) Et comme la position des ces parties (par exemple des cellules dans une ligne) n'est pas connue d'avance, il est beaucoup plus facile d'utiliser une approche récursive, où un template XSL peut être amené à construire une partie "mal-formée" du XML de sortie.

    Mais là, j'en conviens, c'est une approche de programmeur!

    Je suis d'accord, avec une approche "en extension", où un template existerait pour chaque structure XML valide et modifiable du document EXCEL de sortie, je pourrai aboutir à un XSL bien formé. Mais ceci au prix d'un volume de texte XSL sans commune mesure beaucoup plus important que ce que je dois gérer actuellement.

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

Discussions similaires

  1. [XSL] Balise JSTL dans la feuille XSL ?
    Par aroutha dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 09/10/2009, 17h45
  2. [XSL] Inclure une balise dans un <xsl:if></xsl:if>
    Par hedgehog dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 08/04/2008, 13h49
  3. [XSL] Passer une variable a une balise HTML dans un fichier
    Par poseidon2 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 09/03/2006, 16h39
  4. [XSL] Passage de variable dans un template
    Par Otarie dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/11/2005, 23h50
  5. [XSL] Balise html dans un XML
    Par Ludo_xml dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 13/06/2005, 13h55

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