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] Séparation texte par ligne


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut [XSLT] Séparation texte par ligne
    Bonjour,

    Je viens à peine de commencer à utiliser xslt et je suis déjà bloqué. Je voudrais séparer le texte d'un noeud pour produire plusieurs noeuds.

    En gros j'ai ça en entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <application version="x.y.z" release_date="YYYY_MM_DD">
    Correction d'un bug xyz.
    Ajout d'une fonctionnalité abc.
    </application>
    et je voudrais produire le xml suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <itemizedlist>
            <listitem>
                  Correction d'un bug xyz.
            </listitem>
            <listitem>
                  Ajout d'une fonctionnalité abc.
            </listitem>
    </itemizedlist>
    Est-ce possible avec xslt ? Ça me simplifierais grandement la vie si je pouvais générer ça sans avoir à toucher au xml de base (qui est généré par un soft donc je devrais modifier ce dernier).

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    C'est dommage que tu ne puisses pas modifier la facon dont le soft génère ton XML, car ce XML ne correspond pas du tout à ton besoin. En effet le seul moyen que tu as pour séparer tes valeurs est de faire un split() sur le caractère ".".

    Tu peux donc créer une XSLT dans laquelle ton importe ton fichier XML de base et appeler un template récursif chargé de séparer récupérer chaque partie de la chaine séparée par le caractère séparateur ".".

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxml msxsl">
        <xsl:import href="monfichierXML.xml"/>
        <xsl:output method="xml" omit-xml-declaration="no"/>
        <xsl:template match="/">
     
    	<applicationsitem>
    		<xsl:for-each select=".//application">
    		<itemizedlist>
    			<xsl:call-template name="split">
    				<xsl:with-param name="string">
    					<xsl:value-of select="."/>
    				</xsl:with-param>
    			</xsl:call-template>
    			</xsl:template>
    		</itemizedlist>
    		</xsl:for-each>
    	</applicationsitem>
     
         </xsl:template>
     
    <xsl:template name="split">
    	<xsl:param name="string"/>
    	<listitem>
        	   <xsl:choose>
                   <xsl:when test="contains($string,'.')">
                       <xsl:value-of select="substring-before($string,';')"/>
    			<xsl:call-template name="split">
    				<xsl:with-param name="string">
    					<xsl:value-of select="substring-after($string,'.')"/>
    				</xsl:with-param>
    			</xsl:call-template>
    		</xsl:when>
    		<xsl:otherwise>
    			<xsl:value-of select="$string"/>
    		</xsl:otherwise>
    	</xsl:choose>
    	</lisitem>
    </xsl:template>

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    En modifiant un peu ton exemple j'ai réussi à faire ce que je voulais :

    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
    <xsl:template name="split">
    <xsl:param name="string"/>
    	<xsl:choose>
    		<xsl:when test="contains($string,'&#xA;')">
    			<listitem>
    				<para><xsl:value-of select="substring-before($string,'&#xA;')"/></para>
    			</listitem>
    			<xsl:call-template name="split">
    			<xsl:with-param name="string">
    				<xsl:value-of select="substring-after($string,'&#xA;')"/>
    			</xsl:with-param>
    			</xsl:call-template>
    		</xsl:when>
    		<xsl:otherwise>
    			<listitem>
    				<para><xsl:value-of select="$string"/></para>
    			</listitem>
    		</xsl:otherwise>
    	</xsl:choose>
    </xsl:template>
    Merci !

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

Discussions similaires

  1. transformer table en texte par lignes
    Par mandrake_of_mandregas dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/07/2010, 02h07
  2. Réponses: 6
    Dernier message: 28/07/2006, 19h04
  3. [XSLT] Créer un tableau HTML en fixant le nombre de cases par ligne
    Par kingmandrax dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 03/07/2006, 17h07
  4. concaténer fichiers texte ligne par ligne
    Par tiboleo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/03/2006, 14h45
  5. Réponses: 20
    Dernier message: 09/02/2006, 10h45

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