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 :

XML XSL vers fichier.cvs


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 30
    Points
    30
    Par défaut XML XSL vers fichier.cvs
    Bonjours, voici le contexte de mon soucis :

    je reçois des fichier xml a entrée en BDD mySql via php5.5
    Je choisis donc de passé sur un format cvs afin de pouvoir utilisé LOAD (IN)FILE de mySql(5.5)

    Mais je n'arrive pas a créer un fichier texte (resultat.cvs pour l'exemple) depuis XSLTProcessor.

    J'utiliserais un fichier trés simple pour l'exemple.

    J'ai donc des fichiers formaté comme ça :
    Code xml : 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
     
    <?xml version="1.0" encoding="utf-8"?>
    <tout>
        <parametres>
            <parametre version="1225"/>
        </parametres>
        <listes>
            <liste id="1" name="premiere liste">
                <contenu idc="2" designation="second contenue"/>
                <contenu idc="3" designation="troisieme contenue"/>
            </liste>
            <liste id="2" name="seconde liste">
                <contenu idc="3" designation="troisieme contenue"/>
                <contenu idc="5" designation="cinquieme contenue"/>
            </liste>
        </listes>
    </tout>

    Le XSL, qui pour chaque élément "contenu" trouvé doit créer cette ligne:
    "NULL","id liste","id contenu","designation";
    Donc le resultat de l'exemple devrais ressemblé a ça:
    "NULL","1","2","second contenue";
    "NULL","1","3","troisieme contenue";
    "NULL","2","3","troisieme contenue";
    "NULL","2","5","cinquieme contenue";
    Code xsl : 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
     
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="text" encoding="utf-8"/>
     
    	<xsl:template match="tout">
    		<xsl:apply-templates/>
    	</xsl:template>
     
    	<xsl:template match="listes">
    		<xsl:apply-templates/>
    	</xsl:template>
     
    	<xsl:template match="liste">
    		<xsl:apply-templates/>
    	</xsl:template>
     
    	<xsl:template match="contenu">
    		<xsl:text>"NULL","</xsl:text>
    		<xsl:value-of select="../@id"/><xsl:text>","</xsl:text>
    		<xsl:value-of select="@idc"/><xsl:text>","</xsl:text>
    		<xsl:value-of select="@designation"/><xsl:text>";</xsl:text>
    	</xsl:template>
     
    </xsl:stylesheet>

    La ou ça ce corse pour moi, c'est de passé du DomDocument au fichier texte.

    Code php : 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
     
    	$myxml = new domDocument();
    	$myxml->load('fichier.xml');
    	$myxsl = new domDocument();
    	$myxsl->load('fichier.xsl');
     
    	$myproc = new XSLTProcessor();
    	$myproc->importStyleSheet($myxsl);
     
    	$resultat=$myproc->transformToXml($myxml);
     
    	if (!is_bool($resultat)) {
    		echo '<p>Is not bool</p>';
    		// sort un fichier vide
    		file_put_contents('resultat.cvs', $resultat);
    	}
    	else echo '<p>Is bool</p>';
    La s'affiche 'Is not bool', donc transformation sans erreur (il semble) mais après je ne sais pas comment écrire $resultat dans un fichier texte.

    Si vous pouviez me donné les bonnes commande PHP ça m'aiderais beaucoup.

    EDIT : Exemple (ci-dessus) corrigé, et fonctionnel.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Le document xml est malformé. Vous n'êtes pas ici pour demander le forum de le corriger, j'espère. Je vois bien d'autres choses qui puissent tourner mal, mais c'est après.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    C'est corrigé pour le xml, erreur de recopie comme le xsl (contenu)

    Les 2 fichiers ce charge bien en domDoc, en faire un xml ou un html ça va, mais ce que je ne sais pas faire, c'est une sortie texte.

    J'ai mi des fichier d'exemple pour que les personnes voulant aidé n'ai qu'a copier/coller s'il avait besoin de testé.

    La, bien sur ça n'écrit qu'une entête xml dans le fichier de résultat du a la méthode ->save

    J'ai donc modifié en utilisant "file_put_contents('resultat.cvs', $resultat);" (ajouté a l'exemple)
    Le fichier est créer mais vide, je revoie donc le xsl demain, je ne vois que ça !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Je suis un âne, j'ai repris ton exemple sur l'autre post et remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat=$myproc->transformToDoc($myxml);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat=$myproc->transformToXml($myxml);
    et ça marche !

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 619
    Points
    21 619
    Par défaut
    En même temps, vu que le but c'est de faire du .csv et pas du XML, c'était pas limpide, comme solution -_-°.

  6. #6
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    @yayabon
    Vous pouvez eliminer parfois automatique la déclaration "prolog" qui devient un ennui pour un travail textuel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:output method="text" omit-xml-declaration="yes" encoding="utf-8"/>
    Je dirais utilser la méthode transformToXml() de laquelle le contrôle omit-xml-declaration devient respectée - mais pas pour la méthode transformToDoc(). D'ailleurs, vous n'êtes pas forcé d'utilser transformToXml() - quoique conceptuellement plus satisfaisant, c'est vrai - il est faisable aussi avec transformToDoc().

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Ok c'est noté, je garde ça au chaud, ça servira tôt où tard... merci pour la précision.

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

Discussions similaires

  1. Problème XML/XSL et fichier son
    Par pwyll2 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 25/05/2011, 12h39
  2. XML + XSL vers XLS
    Par freishotor dans le forum Format d'échange (XML, JSON...)
    Réponses: 14
    Dernier message: 14/12/2006, 14h30
  3. JAXB XML: Marchalling vers fichier plus rapide qu'en mémoire(DOM)? Pourquoi?
    Par clincks dans le forum Persistance des données
    Réponses: 2
    Dernier message: 12/07/2006, 07h48
  4. [FOP] Problème de conversion xml/xsl vers pdf
    Par Shadow aok dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/03/2006, 10h41
  5. XML/XSL vers HTML: comment transformer les linefeed en <B
    Par AlainM dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/11/2003, 12h30

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