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

XML/XSL et SOAP Discussion :

Transformation XML en CSV, problème indentation


Sujet :

XML/XSL et SOAP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Transformation XML en CSV, problème indentation
    Bonjour à tous,
    je pose ma dernière question sur le sujet, après j'abandonne ...

    Voila le contexte, j'ai un fichier xml que je transforme avec un xsl.
    Je veux avec cette transformation généré un fichier de type csv avec séparateur ;

    Jusque la et grâce à votre aide, je parcours bien le xml, les element sont correctement extrait, le fichier est rempli.

    MAIS j'ai un souci, dans le flux récupéré, j'ai deux balises sue j'englobe dans la balise d'origine, avec un template et une mise en forme (balise html - Merci Thelvin)

    Le problème sur lequel j'explose depuis 4 jours maintenant, j'ai beau essayé de passer la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:output method="html" indent="no"/>
    avec le "indent" à no, en mode text à la place du html, j'ai systématiquement dans mon fichier csv des saut de ligne correspondant aux balises que je récupère et met en forme avec le html.
    Même en appliquant un traitement avec un template xsl ou je vire ces 2 balises, en sortie j'ai toujours des saut de ligne.

    Ce qui veut dire que mon fichier csv ne fonctionne pas car pour lui la fin de la ligne et le preimer espace qu'il va trouver suite à l'indentation des éléments.

    Voici le fichier pour que ce soit plus clair :
    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
    <article idArticle="lea10018796" rubrique="juridique" dateArticle="26/04/2012">
    <titrearticle>Publication des droits de vote dans les sociétés par actions</titrearticle>
    <chapitre>
    <titrechapitre>Les sociétés par actions non cotées ne sont plus tenues, sauf exception, de publier le nombre total de leurs droits de vote.</titrechapitre>
    <refchapitre>
    <lien href="http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000025553296&amp;fastPos=1&amp;fastReqId=1905001663&amp;categorieLien=id&amp;oldAction=rechTexte#JORFARTI000025553375">Art. 11, loi n° 2012-387 du 22 mars 2012, JO du 23</lien>
    </refchapitre>
    <photo src="http://photo.expert-infos.com/lea10018796.jpg"/>
    <contenu>
    <paragraphe>
    					<texteparagraphe>Excepté les SAS, toute société par actions devait, jusqu'à maintenant, informer ses actionnaires du nombre total de droits de vote existant à la date de l'assemblée générale ordinaire (AGO), au plus tard dans les 15 jours qui suivaient cette assemblée. Information qui prenait la forme d'un avis publié dans un journal d'annonces légales.</texteparagraphe>
    					<texteparagraphe>
    						<annotation>
    							<titreannotation>Précision*:</titreannotation>
    							<texteannotation>*cette information permettait aux actionnaires d'apprécier s'ils avaient ou non franchi un seuil de participation leur imposant* de procéder à une déclaration de franchissement de seuils.</texteannotation>
    						</annotation>
    					</texteparagraphe>
    					<texteparagraphe>La récente loi de simplification du droit a supprimé cette obligation d'information pour les sociétés non cotées lorsque le nombre de leurs droits de vote n'a pas varié par rapport à celui de la précédente AGO.</texteparagraphe>
    				</paragraphe>
    </contenu>
    </chapitre>
    </article>
    Le fichier xsl pour le traitement :
    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
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="html" indent="no"/> 
     
    <xsl:template match="/">  
    <xsl:apply-templates select="//article"/>
    </xsl:template>
     
    <xsl:template match="annotation | titreannotation | exposant | retourligne"><i><xsl:apply-templates/></i></xsl:template>
     
    <xsl:template match="article">
        <xsl:value-of select="@idArticle" />
        <xsl:text>;</xsl:text>
        <xsl:value-of select="@rubrique" />
        <xsl:text>;</xsl:text>
        <xsl:value-of select="@dateArticle" />
        <xsl:text>;</xsl:text>
        <xsl:value-of select="./titrearticle"/>
        <xsl:text>;</xsl:text>
    	<xsl:value-of select="./chapitre/titrechapitre"/>
         <xsl:text>;</xsl:text>
    	<xsl:value-of select="./chapitre/photo/@src" />
        <xsl:text>;</xsl:text>
      	    <xsl:for-each select="./chapitre/contenu/paragraphe/texteparagraphe">
        		 <xsl:apply-templates/>
             </xsl:for-each>
       </xsl:template>
     
    </xsl:stylesheet>
    et voila mon fichier csv :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lea10018816;social;27/04/2012;La lisibilité du bulletin de paie bientôt améliorée ?;Une loi récente prévoit de simplifier les bulletins de paie à compter de l'année prochaine.;http://photo.expert-infos.com/lea10018816.jpg;La récente loi de simplification du droit contient un article visant à améliorer la lisibilité du bulletin de paie et à réduire le nombre de lignes qu’il contient, notamment celles relatives aux cotisations et contributions sociales. Deux étapes sont prévues à cet effet.La première, consiste à l’harmonisation, au plus tard le 1er janvier 2013, des dispositions réglementaires définissant les éléments nécessaires au calcul de différentes cotisations sociales (assurances sociales, assurance chômage, retraite complémentaire).Quant à la 2de étape, fixée au 1er janvier 2015 au plus tard, elle consiste en l’obligation, pour les instances chargées de la gestion du régime d’assurance chômage et des régimes de protection sociale complémentaire, de mettre en œuvre des dispositions utiles pour que les conventions et accords négociés tiennent compte de l’harmonisation des assiettes sociales.
     
    							Remarque :
    							 une maquette du futur bulletin de paie simplifié a été présentée par le ministre du Travail le 19 mars dernier. Cette maquette se signale notamment par le regroupement de l’ensemble des cotisations sociales salariales et patronales.
    Si vous observez le résultat du fichier csv, on voit l'indentation avant "remarque" qui provoque un saut de ligne puis encore un saut de ligne pour le texte sous la remarque qui est une nouvelle balise.

    Je cherche à avoir tout les élément mais sans les indentations qui générent des saut de ligne et du coup me plante completement le fichier csv pour importation.

    SVP, quelqu"un peut-il m'aider ?
    Merci à vous, sinon il me reste la possibilité de poser une question dans la section php pour nettoyer le fichier de ces saut de ligne avant de l'importer ??

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Points : 300
    Points
    300
    Par défaut
    A priori, c'est bien ton fichier XML qu'il faudrait nettoyer. Sinon tu peux toujours essayer cette instruction en tête de ton document XSLT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:strip-space elements="texteparagraphe"/>
    sinon la structure de ton document XML, me paraît étrange :

    <texteparagraphe> contient du texte ou bien annotation, il vaux mieux éviter d'avoir du texte ou des balises en terme de traitement, tu pourrais avoir une balise intermédiare, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <texteparagraphe>
      <defaut>dsfkjhskdfsjhdfskjdfhsdfs<defaut>
    </textparagraphe>
    et/ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <texteparagraphe>
      <annotation>...<annotation>
    </textparagraphe>

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Bonjour abrillant,
    je n'ai aucune maîtrise du fichier XML, je le reçois comme cela et je dois le traiter ainsi.
    Il y a du mieux, cepandant il me fait toujours un saut de ligne pour l'indentation mais la commande à réduit les erreurs.

    Je viens d'essayer :
    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
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="html" indent="no"/> 
        <xsl:strip-space elements="texteparagraphe"/>
     
    <xsl:template match="/">  
    <xsl:apply-templates select="//article"/>
    </xsl:template>
     
    <xsl:template match="annotation | titreannotation | exposant | retourligne"><i><xsl:apply-templates/></i></xsl:template>
     
     
    <xsl:template match="article">
        <xsl:value-of select="@idArticle" />
        <xsl:text>;</xsl:text>
        <xsl:value-of select="@rubrique" />
        <xsl:text>;</xsl:text>
        <xsl:value-of select="@dateArticle" />
        <xsl:text>;</xsl:text>
        <xsl:value-of select="./titrearticle"/>
        <xsl:text>;</xsl:text>
    	<xsl:value-of select="./chapitre/titrechapitre"/>
         <xsl:text>;</xsl:text>
    	<xsl:value-of select="./chapitre/photo/@src" />
        <xsl:text>;</xsl:text>
      	    <xsl:for-each select="./chapitre/contenu/paragraphe/texteparagraphe">
        		 <xsl:apply-templates/>
             </xsl:for-each>
       </xsl:template>
     
    </xsl:stylesheet>
    Y a t il une derniere commande pour virer l'indentation qui provoque le saut de ligne ?
    Voila le resultat apres la commande Strip space :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    lea10018816;social;27/04/2012;La lisibilité du bulletin de paie bientôt améliorée ?;Une loi récente prévoit de simplifier les bulletins de paie à compter de l'année prochaine.;http://photo.expert-infos.com/lea10018816.jpg;La récente loi de simplification du droit contient un article visant à améliorer la lisibilité du bulletin de paie et à réduire le nombre de lignes qu’il contient, notamment celles relatives aux cotisations et contributions sociales. Deux étapes sont prévues à cet effet.La première, consiste à l’harmonisation, au plus tard le 1<i>er</i> janvier 2013, des dispositions réglementaires définissant les éléments nécessaires au calcul de différentes cotisations sociales (assurances sociales, assurance chômage, retraite complémentaire).Quant à la 2<i>de</i> étape, fixée au 1<i>er</i> janvier 2015 au plus tard, elle consiste en l’obligation, pour les instances chargées de la gestion du régime d’assurance chômage et des régimes de protection sociale complémentaire, de mettre en œuvre des dispositions utiles pour que les conventions et accords négociés tiennent compte de l’harmonisation des assiettes sociales.<i>
    							<i>Remarque :</i>
    							 une maquette du futur bulletin de paie simplifié a été présentée par le ministre du Travail le 19 mars dernier. Cette maquette se signale notamment par le regroupement de l’ensemble des cotisations sociales salariales et patronales.
    						</i>
    il faudrait que mes balise <i><i>...</i></i> soit coller est tou sera fonctionnel
    Une idée ??

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Points : 300
    Points
    300
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <xsl:for-each select="./chapitre/contenu/paragraphe/texteparagraphe">
        		 <xsl:apply-templates/>
     </xsl:for-each>
    Ne paraît pas correct dans le cas d'un texte avant la balise annotation car tu utilises une règle par défaut qui prend tout le contenu, mais on peut peut être s'en sortir, ajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:template match="texteparagraphe/text()"><xsl:value select='.'/></xsl:template>
     
    <xsl:template match="text()"></xsl:template>
    Sinon tu peux ajouter translate( ., "&#0x9", "" ) dans l'attribut select pour supprimer toutes les tabulations.

    Essayes également

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:strip-space elements="*"/>

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton aide, avec le strip pass * c'etait mieux mais j'ai encore des balises à la con dans le html genre <retourligne/> sans balise ouvrante.
    C'est la cata, je vais essayer de me tourner vers du php sans xslt pour essayer d'injecter ces satané flux dans une base mysql ...

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Max1000p Voir le message
    C'est la cata, je vais essayer de me tourner vers du php sans xslt pour essayer d'injecter ces satané flux dans une base mysql ...
    Sage décision. XSLT n'a jamais été prévu pour générer des données structurées autrement qu'en XML. C'était tout au plus possible en bricolant absolument tout jusqu'au dernier détail.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. sed et awk pour transformation d'un fichier XML en CSV
    Par bstages2000 dans le forum Linux
    Réponses: 4
    Dernier message: 02/03/2008, 17h19
  2. [XSLT] Transformer un xml en HTML : problème sur les liens
    Par elhout dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/03/2007, 10h46
  3. [XML][CSV]Transformer du XML en CSV et inversement !
    Par tgarcia dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 20/11/2006, 16h10
  4. Réponses: 7
    Dernier message: 29/06/2006, 12h33
  5. [XSLT] Problème de transformation XML avec un fichier xslt
    Par seb35 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 24/04/2006, 22h02

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