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 :

Ajout saut de ligne entre les attributs d'un élément


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Ajout saut de ligne entre les attributs d'un élément
    Bonjour,

    Besoin d'aide pour ajouter un saut de ligne entre les attributs d'un élément.
    Pour le moment, ils sont sur la même ligne, les uns à la suite des autres...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:for-each select="/fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
    	<xsl:element name="MyElement">
    		<xsl:attribute name="NAME"><xsl:value-of select="fmp:COL[6]" /></xsl:attribute>
    		<xsl:attribute name="DATE"><xsl:value-of select="fmp:COL[7]"/></xsl:attribute>
    	</xsl:element>
    </xsl:for-each>



    Merci !

  2. #2
    Modérateur

    Hello,

    comme le whitespace entre attributs "ne compte pas" (il est ignoré par le parseur XML), il n'existe pas de réglage XSLT standardisé pour le régler.

    A voir si le moteur XSLT que toi tu choisis d'utiliser, propose des directives non-standard pour régler ça, mais il n'y a pas de standard.

    Personnellement, franchement, quand j'ai envie de faire ça, je repasse ma propre moulinette derrière qui lit le XML produit avec un parseur normal, et le réécrit avec un formateur que j'ai fait moi-même.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Merci de ta réponse.

    Je suis sur la plateforme FileMaker qui utilise xalan.
    J'ai cherché partout des directives pour forcer ce paramétrage mais je n'ai rien trouvé.
    C'est dommage quand même de rajouter un traitement sur le fichier produit, c'est pas l'idéal.
    Mais bon si je n'ai pas le choix, il va bien falloir s'y atteler...

  4. #4
    Candidat au Club
    Tu aurais un exemple du retraitement que tu opères par hasard ?

  5. #5
    Modérateur

    St'un peu long à montrer.

    C'est une classe Java qui prend un Document XML parsé en JDOM2, ainsi qu'une valeur d'indentation et une liste de noms de balises pour lesquelles les attributs doivent apparaître chacun sur une ligne.

    A partir de là, elle parcourt le Document récursivement, en retenant le niveau d'indentation auquel mettre les nouvelles balises/les attributs. Et elle s'occupe d'échapper les caractères qui ont besoin d'un échappement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre émérite
    On peut le faire en restant dans l'eco-system classique via SAX2.

    D'abord, on doit se familiariser comme faire une extension du défaut ContentHandler de produire une exacte copie du document donné (comme une transformation identique en xslt).

    Avec ça prêt, on modifie le handler de l'évenement startElement() dans lequel on traite normalement des attributs. Au lieu de écrivant simplement pour sortir un espace vide puis le nom et "=" et sa valeur en parenthèses ... on écrit par insertion un line-break et puis certaine nombre de espace vide (ou \t) pour l'effet d'indentation.

    La détermination de ce dernier est plus délicate: il peut être déterminé par le stokage des caractères capturés juste avant le handler de l'évenement startElement() par ce que le handler de l'évenement characters(). Les espaces vides significatifs sont ceux après le dernier line-break et finalement ajoutant la grandeur d'indentation supplémentaire désiré ...

    Voilà la procédure par étape.

###raw>template_hook.ano_emploi###