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 et php5 code minimal pour exemple


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 xsl et php5 code minimal pour exemple
    Bonjours a tous,

    je n'arrive pas a modifié mon xml via xsl (xml->xml). Donc je part sur un exemple très minim pour voir ou je me plante.

    Je voudrais donc, a l'appele de ma page php qu'il prenne un xml et un xsl et m'enregistre un nouveau xml.

    Dans l'état, ça me ressort le xml d'origine mais je ne sait pas si c'est due au xsl ou au code php (rappel: php5)

    Je ne trouve (et je n'ai...) que des exemples en sortie html et je tourne un peut en rond, un coup de main serais bien venue.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <tout>
    	<contenu id="1">
    		<sous>sous contenu 1</sous>
    	</contenu>
    </tout>
    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
     
    <xsl:stylesheet version="1.0" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
    	<xsl:output output method="xml" encoding="utf-8"/>
     
    	<xsl:template match="tout">
    	 <test>
    	  <ici>Ca marche</ici>
    	  <xsl:apply-templates />
    	 </test>
    	</xsl:template>
     
    	<xsl:template match="contenu">
    	  <ici>Ca marche aussi</ici>
    	  <xsl:apply-templates />
    	</xsl:template>
     
    </xsl:stylesheet>
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <!DOCTYPE html>
    <html lang="fr">
    	<head>
    	  <meta charset="UTF-8">
    	  <title>test xsl</title>
    	</head>
    	<body>
    	<!-- Document -->
    	<p>avant php</p>
    		<?php
    		$myxml = new domDocument();
    		$myxml->load('xmltest.xml');
     
    		$myxsl = new domDocument();
    		$myxsl->load('xsltest.xsl');
     
    		$myproc = new XSLTProcessor();
     
    		$myproc->importStyleSheet($myxsl);
    		$myproc->transformToXml($myxml);
    		// la ca me ressort le fichier xml d'origine
    		$myxml->save('restest.xml');
    		?>
    	<p>apres php</p>
    	</body>
    </html>

    Merci

  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
    [0] D'abord, la balise xsl:output s'érit comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!--
    <xsl:output output method="xml" encoding="utf-8"/>
    -->
    <xsl:output method="xml" encoding="utf-8"/>
    [1] Puis, transformToXml() retourne un booléen false si il y a une erreur et retourne un String sérialisant de xml transformé; donc, la partie concernant doit s'écrire comme ça ou des variants de celle-là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /*
    $myproc->transformToXml($myxml);
    // la ca me ressort le fichier xml d'origine
    $myxml->save('restest.xml');
    */
    $xmloutstring=$myproc->transformToXml($myxml);
    if (!is_bool($xmloutstring)) {
        file_put_contents('restest.xml', $xmloutstring);
    }
    [1.1] Si vous voulez utiliser la méthode save() sous-entendu ressortant un objet d'après la transformation, vous pouvez faire comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $xmloutdom=$myproc->transformToDoc($myxml);
    if (!is_bool($xmloutdom)) {
        $xmloutdom->save('restest.xml');
    }
    Voilà.

  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
    Merci, donc si cela fonctionne chez vous, j'ai un autre probleme car chez moi $xmloutdom is bool

    je remet ce que j'ai tel quel:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <tout>
    	<contenu id="1">
    	</contenu>
    </tout>
    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
     
    <xsl:stylesheet version="1.0" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
    	<xsl:output method="xml" encoding="utf-8"/>
     
    	<xsl:template match="tout">
    	 <test>
    	  <ici>Ca marche</ici>
    	  <xsl:apply-templates />
    	 <test>
    	</xsl:template>
     
    	<xsl:template match="contenu">
    	  <ici>Ca marche aussi</ici>
    	  <xsl:apply-templates />
    	</xsl:template>
     
    </xsl:stylesheet>
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    <!DOCTYPE html>
    <html lang="fr">
    	<head>
    	  <meta charset="UTF-8">
    	  <title>test xsl</title>
    	</head>
    	<body>
    	<p>avant php</p>
    		<?php
    		$myxml = new domDocument();
    		$myxml->load('xmltest.xml');
     
    		$myxsl = new domDocument();
    		$myxsl->load('xsltest.xsl');
     
    		$myproc = new XSLTProcessor();
    		$myproc->importStyleSheet($myxsl);
    		/*
    		$xmloutstring=$myproc->transformToXml($myxml);
    		if (!is_bool($xmloutstring)) {
    			file_put_contents('restest.xml', $xmloutstring);
    		}
    		else echo '<p>Is bool</p>';
    		*/
    		$xmloutdom=$myproc->transformToDoc($myxml);
    		if (!is_bool($xmloutdom)) {
    			$xmloutdom->save('restest.xml');
    		}
    		else echo '<p>Is bool</p>';
    		?>
    	<p>apres php</p>
    	</body>
    </html>

    Resultat attendu :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <test>
    	<ici>Ca marche</ici>
    	<ici>Ca marche aussi</ici>
    </test>

  4. #4
    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
    Il faut verifier les fichiers xmltest.xml et xsltest.xsl sont dans la même parcours de php. Si c'est verifié, je ne sais pas: il devrait marcher. Et bien-entendu, la configuration du serveur doit être en place comme par exemple phpinfo montre bien dom, libxml, xml, etc etc...

  5. #5
    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 rage...
    Citation Envoyé par phpinfo DOM
    DOM/XML enabled
    DOM/XML API Version 20031129
    libxml Version 2.7.8
    HTML Support enabled
    XPath Support enabled
    XPointer Support enabled
    Schema Support enabled
    RelaxNG Support enabled
    Citation Envoyé par phpinfo LIBXML
    libXML support active
    libXML Compiled Version 2.7.8
    libXML Loaded Version 20708
    libXML streams enabled
    Citation Envoyé par phpinfo XSL
    XSL enabled
    libxslt Version 1.1.26
    libxslt compiled against libxml Version 2.7.8
    EXSLT enabled
    libexslt Version 1.1.26
    Citation Envoyé par phpinfo XML
    XML Support active
    XML Namespace Support active
    libxml2 Version 2.7.8

  6. #6
    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 vient de testé ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		$myxml = new domDocument();
    		$myxml->load('xmltest.xml');
    		$myxml->save('res.xml');
    		$myxsl = new domDocument();
    		$myxsl->load('xsltest.xsl');
    		$myxsl->save('res.xsl');

    Et le xsl ne renvoie que même en ajoutant l'entête xml au fichier xsl...je vais repartir d'un file vierge pour voir.

  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
    Bon, il ne charge pas le xsl dans le dom, mais le xml oui... c'est quand même enorme ce truc

  8. #8
    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
    Ha je vient de voir un truc qui me trouble dans php.ini
    Alors que j'ai installer le paquet php5-xsl mais ca n'a peut être pas tout fait :
    Citation Envoyé par php.ini
    [xsl]
    ; Write operations from within XSLT are disabled by default.
    ; XSL_SECPREF_CREATE_DIRECTORY | XSL_SECPREF_WRITE_NETWORK |*XSL_SECPREF_WRITE_FILE = 44
    ; Set it to 0 to allow all operations
    ;xsl.security_prefs = 44

    ; Local Variables:
    ; tab-width: 4
    ; End:
    faut il décommenté une ou plusieurs ligne (avant de faire une boulette)

  9. #9
    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
    J'espère qu'il y ait au moins:
    extension=php_xsl.dll

  10. #10
    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
    Plutôt:
    extension=/usr/lib/php5/20090626/xsl.so
    (ubuntu12.04)

    EDIT : je précise que j'ai ajouté cette ligne moi même, elle n'y était pas.


    Mais je ne vois pas la raison pour laquel il ne charge pas le xsl dans le dom, il devrait le prendre comme un xml normal et l'ecrire avec save() en tant que xml...

    Même en changeant l'extention et en mettant une entête xml, ça ne marche pas alors que l'autres fichier (xmltest.xml) est correctement reécrit.

  11. #11
    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 raisonnement est bon pourtant.

    Ouvrez xsltest.xsl avec un editeur hex, examinez si il y a ou non le bom (3 bytes) et ansi que le xmltest.xml... examinez un peu dans cette direction le fichier xsl.

  12. #12
    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
    pas de bom, faut il l'ajouté ?

    edit : testé aucun changement.

  13. #13
    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
    Bon, j'ai supprimé le fichier qui posait probleme et j'ai retapé le xsl dans une copie du fichier xml et ça marche...

    Fichier corrompu, super le week end boulo pour rien mais je ne crie pas victoire trop vite je n'ai pas encore testé la transformation, mais il se charge dans le dom, c'est déjà ça.

  14. #14
    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
    Bon j'entame la danse de la victoire...
    resxml.xml:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8"?>
    <test><ici>ça marche</ici>
    	<ici>ça marche aussi</ici>
     
    </test>

    Merci de m'avoir aidé 'tsuji' et pour ta patience

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/01/2015, 18h32
  2. Code minimal pour un GP avec JGAP
    Par rei.uchiwa dans le forum Intelligence artificielle
    Réponses: 0
    Dernier message: 08/06/2010, 21h10
  3. Réponses: 4
    Dernier message: 07/05/2009, 16h38
  4. [bash][exemple de code] Script pour monter les clef usb
    Par troumad dans le forum Contribuez
    Réponses: 6
    Dernier message: 29/10/2007, 10h11

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