xslt et php

xslt et php - PHP - Programmation

Marsh Posté le 19-01-2009 à 20:08:11    

bjr,
 
j'utilise php5 et j'ai un souci avec xsl.  
J'ai un fichier xml assez gros de plusieurs mega et je veux faire une requete dessus et afficher via XSLT.  
La nouvelle lib XSL de PHP5 ne prend en entrée que des DOMXML et plus des fichiers. Donc je suis obligé de faire un  
$doc->load('monfichier.xml')
qui est très long. Et je dois le faire à chaque fois que la page s'ouvre puisqu'on ne peut pas passer un DOM dans les variables de sessions.
 
Je voulais utiliser la lib xslt de php4 qui permet de faire la requete sur des fichiers xml et non des domxml mais c'est plus dispo en php5 et j'arrive pas à l'installer. On m'a dit que c'est parce que php5 ne supporte plus sablotron...
 
Une idée pour m'aider?
merci !!!

Reply

Marsh Posté le 19-01-2009 à 20:08:11   

Reply

Marsh Posté le 19-01-2009 à 22:34:33    

Tu peux stocker un objet DOM dans tes sessions, suffi de le sérialiser ... Question : Pourquoi reloader ton fichier .xml à chaque page pour après le transformer avec XSL ?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 20-01-2009 à 08:42:01    

manu0000 a écrit :

Je voulais utiliser la lib xslt de php4 qui permet de faire la requete sur des fichiers xml et non des domxml


Nan, le fichier sera quand-même parsé. C'est juste la syntaxe qui était un peu plus légère. Mais qui dis transfo XSLT dit parsing obligatoire, ça ne change rien.
 
C'est un des inconvénients de DOM & XSL, ça n'est pas super-adapté pour les gros fichiers, surtout dans un environnement web où les pages doivent être débitées rapidement. Pour du desktop pas de probs, on mettera une barre de progression...
 
Donc comme l'a proposé esox, est-ce que le résultat change à chaque requête ? Si ce n'est pas le cas, autant mettre en cache (en session, ou sur le disque) pour ne calculer qu'une seul fois...

Reply

Marsh Posté le 23-01-2009 à 18:20:23    

merci pour vos reponses
@esox_ch : on peut pas stocker des ressources dans les variables de session or le dom est une ressource php
@florentG : ok merci, c'est bien ce qui me semblait, c tout pourri pour les gros fichiers
par contre :  
    - oui le resultat change à chaque fois parce que c'est le resultat d'une requete (la chaine xslt est reconstruite à chaque fois et est differente à chaque fois que la page est loadée à priori)
    - ce que je veux mettre en cache n'est pas le resultat mais la bdd xml
 
du coup, je cherche une extension xquery  
ai trouvé zorba mais pas les bin pour win32...
a+

Message cité 1 fois
Message édité par manu0000 le 23-01-2009 à 18:24:58
Reply

Marsh Posté le 23-01-2009 à 18:26:37    

ou sinon, je vais tout passer en mysql
...

Reply

Marsh Posté le 23-01-2009 à 18:34:52    

manu0000 a écrit :

merci pour vos reponses
@esox_ch : on peut pas stocker des ressources dans les variables de session or le dom est une ressource php


non, ce n'est pas une ressource mais un objet, et on peut parfaitement passer un objet dans une variable de session.
 

Reply

Marsh Posté le 23-01-2009 à 18:55:12    


Correction : l'équivalent sérialisé de l'objet.
 
On ne peut pas mettre l'objet en lui même dans la session.

Reply

Marsh Posté le 23-01-2009 à 18:59:09    

:o

Reply

Marsh Posté le 23-01-2009 à 19:12:12    

ben c'est listé comme ressource
http://www.php.net/manual/fr/resource.php
et moi j'arrive pas à le recuperer via var de session

Reply

Marsh Posté le 23-01-2009 à 19:12:35    

je parle de domxml

Reply

Marsh Posté le 23-01-2009 à 19:12:35   

Reply

Marsh Posté le 23-01-2009 à 19:17:08    

je pense qu'il s'agit de la version procédurale de domxml qui elle utilise les ressources, mais si tu as PHP 5 je doute que tu utilises cette version, mais si c'est le cas, passe à la version objet.

Reply

Marsh Posté le 23-01-2009 à 19:25:15    

c'est la version objet

Reply

Marsh Posté le 23-01-2009 à 19:29:47    

en fait c'est dom et pas domxml, sorry !
neanmois j'arrive bien à passer des scalaires mais pas des dom via les var de sessions
y a t-il une manip speciale à faire svp?
merci !


Message édité par manu0000 le 23-01-2009 à 19:30:13
Reply

Marsh Posté le 23-01-2009 à 19:29:55    

alors çà passe sans problème avec les sessions
 
EDIT :  [:grilled]  
Est ce que tu sérialises ?

Code :
  1. $_SESSION['dom'] = serialize($dom);
  2. //recup de l'objet...
  3. $dom = unserialize($_SESSION['dom']);


Message édité par Profil supprimé le 23-01-2009 à 19:31:48
Reply

Marsh Posté le 23-01-2009 à 19:33:02    

Reply

Marsh Posté le 23-01-2009 à 19:33:52    

non je serialise pas, je pensais que php 5 faisait ça tout seul
je vais essayer

Reply

Marsh Posté le 23-01-2009 à 19:45:49    

j'ai essayé mais marche pas,  
c'est expliqué là
http://bugs.php.net/bug.php?id=30321

Reply

Marsh Posté le 23-01-2009 à 19:48:27    

ah dommage [:sadnoir]
Petite question : pourquoi dois-tu manipuler un XML de plusieurs Mo ?

Reply

Marsh Posté le 23-01-2009 à 19:50:20    

et la solution là
http://osdir.com/answers/php/4506- [...] bject.html
(il faut utiliser saveXML et loadXML)
merci à tous !!

Reply

Marsh Posté le 23-01-2009 à 19:51:29    

parce que je recupere ma base de donnée au format xml (de pls mo), et j'avais envie de faire des requetes dessus via xslt sans passer par mysql

Reply

Marsh Posté le 23-01-2009 à 19:52:13    

tu peux aussi utiliser SAX qui possède un mode de lecture séquentiel, plus performant sur les gros fichiers ;) Ca peut être intéressant ;)


Message édité par Profil supprimé le 23-01-2009 à 19:52:21
Reply

Marsh Posté le 23-01-2009 à 20:01:48    

ok merci
je connais pas, je vais me renseigner sur SAX

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed