Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1375 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  XML -> PHP : Ouai mais ....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

XML -> PHP : Ouai mais ....

n°1219433
djfx
Vive la biere !
Posté le 10-10-2005 à 12:49:21  profilanswer
 

Bonjour à tous,
 
dans le cadre d'une refonte de site web, je planche actuellement sur l'exploitation des fichiers XML issue de la BDD produit, pour générer des pages et des menus dynamiques. Le but serait de prendre en compte les modifs, juste en faisant une MAJ des fichiers XML (soit un export de la BDD).
NB : Je ne peut à priori pas attaquer la BDD Oracle.......  sinon je l'aurai fait.....
 
J'ai fait le tour des parser XML qui existe en PHP (5.1.0), j'ai testé, mais c'est pas très concluant ! Je réccupère les données sous forme d'un MEGA tableau. Alors faut-il que je me paluche la mise en page du tableau, pour reccuperer les données ??  :(  
 
Ou aurriez vous une ID + simple, et donc + rapide ?
Merci.  :hello:


Message édité par djfx le 10-10-2005 à 12:50:32

---------------
Pas oublier les glacons pour l'apero !!
mood
Publicité
Posté le 10-10-2005 à 12:49:21  profilanswer
 

n°1219435
onizuka_se​nsei
Posté le 10-10-2005 à 12:56:48  profilanswer
 

Tu peux utiliser Xpath pour récupérer les données que tu veux

n°1219441
omega2
Posté le 10-10-2005 à 13:11:21  profilanswer
 

Avec simpleXML, les données sont récupéré sous forme d'objets. Je sais pas ce que ca vaut pour des fichiers XML de plusieurs disaines de méga, mais c'est facile à utiliser avec des fichiers xml d'assez petite taille.
Mais de toute maniére, a partir du moment où t'as plusieurs fois la même catégorie de balise dans ton fichier xml, tu seras obligé de boucler dessus. Mais en sql aussi t'es obligé de boucler sur le résultat de la requette. ;)
 
 
Par contre, un truc que je ne comprend vraiment pas : c'est quoi ton histoire de faire un traitement sur la "mise en page du tableau" pour récupérer les données?

n°1219468
djfx
Vive la biere !
Posté le 10-10-2005 à 13:35:41  profilanswer
 

Bah en fait quand je reccupere les données, c'est un tableau contenu dans un tableau, d'un tableau ....... c'est un truc a ralonge quoi ! En gros, à chaque balise il crée un nouveau tableau. Donc pour afficher j'ai bouclé dessus, mais genre pour lui dire de trier, et de reccuperer les données qui sont uniquement entre les balise XY, je lutte un peu..... :??:  
 
PS : Taille maxi des fichiers : 3Mo
Yen a une dizaine...


---------------
Pas oublier les glacons pour l'apero !!
n°1219475
omega2
Posté le 10-10-2005 à 13:38:35  profilanswer
 

Tu fais comment pour récupérer les données pour le moment?

n°1219492
DEns91
Posté le 10-10-2005 à 13:49:20  profilanswer
 

Avec la methode sax tu peux recupérer les données d'un fichier xml comme tu veux. C toi qui défini le format du tableau que tu auras à la sortie.

n°1219538
djfx
Vive la biere !
Posté le 10-10-2005 à 14:12:11  profilanswer
 

Sax ??? Interessant ......
Pour le moment j'ai reccupéré 1 script sur le site php.net, mais c'est bof bof ......
Ca ressemble à ca :
 
class xml2Array {
    var $arrOutput = array();
    var $resParser;
    var $strXmlData;
 
    function parse($strInputXML) {
 
        $this->resParser = xml_parser_create ();
        xml_set_object($this->resParser,$this);
        xml_set_element_handler($this->resParser, "tagOpen", "tagClosed" );
 
        xml_set_character_data_handler($this->resParser, "tagData" );
 
        $this->strXmlData = xml_parse($this->resParser,$strInputXML );
        if(!$this->strXmlData) {
            die(sprintf("XML error: %s at line %d",
            xml_error_string(xml_get_error_code($this->resParser)),
            xml_get_current_line_number($this->resParser)));
        }
         
        xml_parser_free($this->resParser);
        return $this->arrOutput;
    }
     
    function tagOpen($parser, $name, $attrs) {
        $tag=array("name"=>$name,"attrs"=>$attrs);
        array_push($this->arrOutput,$tag);
    }
     
    function tagData($parser, $tagData) {
        if(trim($tagData)) {
            if(isset($this->arrOutput[count($this->arrOutput)-1]['tagData'])) {
                $this->arrOutput[count($this->arrOutput)-1]['tagData'] .= $tagData;
            }else {
                $this->arrOutput[count($this->arrOutput)-1]['tagData'] = $tagData;
            }
        }
    }
 
    function tagClosed($parser, $name) {
        $this->arrOutput[count($this->arrOutput)-2]['children'][] = $this->arrOutput[count($this->arrOutput)-1];
        array_pop($this->arrOutput);
    }
}


---------------
Pas oublier les glacons pour l'apero !!
n°1219563
omega2
Posté le 10-10-2005 à 14:24:30  profilanswer
 

Ha ben oui, tu m'étones que tu te retrouves avec un array contenant de multiples niveaux d'array.
En plus, avec une classe pareille tu risques de dépasser la taille mémoire maximale aloué au script php.
 
 
Essaye plustôt de traiter le fichier xml avec des fonctions faites pour ça : DOM, simpleXML ou SAX. (je me suis jamais penché sur SAX mais c'est quand même conus)

n°1219603
DEns91
Posté le 10-10-2005 à 15:00:17  profilanswer
 

Tiens regarde plutot la solution que je propose sur ce post ::
http://forum.hardware.fr/forum2.ph [...] y=0&nojs=0
 
Pas de souci de performance.

n°1219737
djfx
Vive la biere !
Posté le 10-10-2005 à 17:05:34  profilanswer
 

Merci les gas  ;)  
Je vais regarder ca en detail des demain (J'ai pas trop de tps la). Je vous tiens au jus.


---------------
Pas oublier les glacons pour l'apero !!
mood
Publicité
Posté le 10-10-2005 à 17:05:34  profilanswer
 

n°1219752
FlorentG
Unité de Masse
Posté le 10-10-2005 à 17:20:35  profilanswer
 

T'es en PHP4, ou PHP5 ?

n°1219804
djfx
Vive la biere !
Posté le 10-10-2005 à 18:11:04  profilanswer
 

FlorentG a écrit :

T'es en PHP4, ou PHP5 ?


 
5.1.0, c'est marqué au dessus  :hello:


---------------
Pas oublier les glacons pour l'apero !!
n°1219817
FlorentG
Unité de Masse
Posté le 10-10-2005 à 18:25:36  profilanswer
 

Ah pardon :D

n°1220990
djfx
Vive la biere !
Posté le 12-10-2005 à 09:58:12  profilanswer
 

Salut,  
bon j'ai pas trop de temps, mais je vien de regarder la solut de Dens91, mais j'ai l'impression que c'est pas gagné.
 
En effet, si ca semble marcher avec des balise comme ca : <cms>.....</cms>
Ca a l'air + chaud avec ca : <cms schema_version="1.3.0"> .....</cms>
 
En fait ya plein d'info dans les balises, et il faudrait que je les reccuperes ......  :(  
Sax ou DOM, ca fait ca ?  :??:  :heink:


---------------
Pas oublier les glacons pour l'apero !!
n°1221029
onizuka_se​nsei
Posté le 12-10-2005 à 10:48:14  profilanswer
 

Je vais peut-être me répéter mais Xpath (bis)
Un tuto pour comprendre de quoi il s'agit: http://jerome.developpez.com/xmlxsl/xpath/

n°1221035
DEns91
Posté le 12-10-2005 à 10:55:23  profilanswer
 

djfx a écrit :

Salut,  
En effet, si ca semble marcher avec des balise comme ca : <cms>.....</cms>
Ca a l'air + chaud avec ca : <cms schema_version="1.3.0"> .....</cms>
Sax ou DOM, ca fait ca ?  :??:


 
Bon ben apparament tu n'a fais aucune recherche sur le xml. Bref...
 
Non y'a aucun probleme schema_version="1.3.0" est un attribut de la balise <cms>. Tu peux utilisé la methode que tu veux DOM( methode hierachique) SAX ( methode evenementiel).
 
 
il suffit de faire un petite modif sur la fonction  de debut de balise que j'ai proposé CAD  
function startElement($parser, $name, $attrs) {
 global $buffer;  
 global $cpt_bien;  
  global $tab_resultats;        
 
 switch($name) {
   case "BIENS" : $cpt_bien = 0; break;
   case "CODE_CLIENT" :  
     case "TYPE_OFFRE" : $buffer = ''; break;
 }        
}  
 
Si tu la lit correctement tu constateras qu'il y a une variable $attrs qui n'es utilisé nullpart,  tu as des attribut donc tu peux l'utilisé pour les recupérés.  
 
Tu devras rajouté dans le code un truc du style
if(!empty($attrs))
$variable['attrs'] = $attrs;
 
Bon courage
 
Peux tu m'explique un brièvement a quoi sa te faire de parsr ce xml. Que vas tu faire des données récupéré ?
 
 
 

n°1221052
cooltwan
Posté le 12-10-2005 à 11:23:09  profilanswer
 

vu que t'as de gros fichiers je te conseille plutot sax

n°1221066
djfx
Vive la biere !
Posté le 12-10-2005 à 11:36:26  profilanswer
 

Oups, excuse Dens91, effectivement j'ai essayé ton bout de code, et ca marche avec des attributs ....  :D  Ok merci.
 
Objectif --> Site web +/- dynamique
En fait les XML proviennent de la BDD catalogue (que je peut pas attaquer direct pour le site en PHP, a moins d'heberger le site ici .....).
Donc je voudrai reccuperer les data pour faire des menus, et afficher les détails produits. je sais que ca risque d'etre long, mais quand il y aura des MAJ dans la base, j'aurai juste à exporter les XML.
 
Bref, je sais que c'est du bricolage, mais c'est une solution temporaire (6 mois maxi)........  :heink:


---------------
Pas oublier les glacons pour l'apero !!
n°1221070
cooltwan
Posté le 12-10-2005 à 11:41:58  profilanswer
 

et tes fichiers xml ont quelle tete ?

n°1221090
DEns91
Posté le 12-10-2005 à 12:04:54  profilanswer
 

djfx a écrit :


Objectif --> Site web +/- dynamique
Donc je voudrai reccuperer les data pour faire des menus, et afficher les détails produits.


 
Si j'ai tous compris c pour faire des rendus HTML ?
Si c le cas tu peux oublié les parseurs XML et t'orienté vers l'XSLT et le feuilles de style. cela t'economiseras enormement de code PHP et reduira les temps de traitement, vue qu'il te faut juste une ligne de commande pour avoir une sortie html. Maintenant il faut des compétences XSL, faire des feuilles de style peux s'avérer des fois complexes. :-)
 

Citation :

ref, je sais que c'est du bricolage, mais c'est une solution temporaire (6 mois maxi)........


 
il n'existe pas de solution parfaite en informatique... on est souvent obligé d'adapté des solutions selon un budjet, un temps imparti, et des ressource dont on dispose. donc si ta solution fonctionne c le plus important!  :)

n°1221096
djfx
Vive la biere !
Posté le 12-10-2005 à 12:12:26  profilanswer
 

Ok merci pour les infos, j'avoue que je ne savais pas trop par quel bout commencer.
 
J'avais deja mis le nez sur du XSLT, ca avait l'air pratique. Bon faut que je bloc qq jours pour faire ca.
 
cooltwan : --> Ca resemble a ca :  
 
<?xml version="1.0" encoding="Iso8859-1" ?>  
<cms schema_version="1.3.0">
  <publication cms_id="80" name="Web : F-Protection">
    <section cms_id="294" name="Onduleurs">
      <subsection cms_id="1315" name="Onduleurs">
        <item_group cms_id="6527" name="Pulsar Evolution rackable">
          <attribute cms_id="7" data_type="4">
            <data cms_id="33853" name="Argumentaire" short_name="Argumentaire" language_id="0">
               La gamme Pulsar Evolution est bla bla....  
            </data>  
          </attribute>
          <item item_code="MG3 66225" mftr_code="">
                blabla ...
          </item>
        </item_group>
/......  


---------------
Pas oublier les glacons pour l'apero !!
n°1221101
DEns91
Posté le 12-10-2005 à 12:20:52  profilanswer
 

djfx a écrit :

Ok merci pour les infos, j'avoue que je ne savais pas trop par quel bout commencer.
 
J'avais deja mis le nez sur du XSLT, ca avait l'air pratique. Bon faut que je bloc qq jours pour faire ca.


C'est pas pratique, c magique !! lol :)

n°1221169
djfx
Vive la biere !
Posté le 12-10-2005 à 14:16:17  profilanswer
 

ARrrrrrrrggggggg  :fou:  
 
Zarraf ! XSLT est pu dispo sous PHP5, et simpleXML qui le remplace me fait n'importe quoi !  :sweat:
 
--------
 
Yessssssss, XSL Fonctionne ! C'est parti !  :bounce:

Message cité 1 fois
Message édité par djfx le 12-10-2005 à 14:41:17

---------------
Pas oublier les glacons pour l'apero !!
n°1221205
DEns91
Posté le 12-10-2005 à 14:44:03  profilanswer
 

djfx a écrit :

ARrrrrrrrggggggg  :fou:  
 
Zarraf ! XSLT est pu dispo sous PHP5, et simpleXML qui le remplace me fait n'importe quoi !  :sweat:


 
Ah je savais pas que XSLT étais dispo sous php, la tu m'apprends quelque chose.
Perso j'ai toujours appelé XSLTPROC par un appel externe system.
exec(XSLTPROC ...les options);
 

n°1221210
DEns91
Posté le 12-10-2005 à 14:54:55  profilanswer
 

je viens d'alle faire un tour sur php.net, J'ai pas trop compris l'interret d'avoir integré sa à PHP. Sa marche parfaitement en ligne de commande je vois pas pourquoi ce prendre la tète a écrire 3 tonnes de code.

n°1221252
djfx
Vive la biere !
Posté le 12-10-2005 à 15:35:57  profilanswer
 

Bon bref, comme je suis pas expert XSLT/XML, je me prononcerai pas la dessus ......  :jap:  
 
Donc visiblement XSLT c'etait dispo sous PHP4, et sou PHP5 ca devient XSL.
Par contre j'ai l'impression que ca utilise du DOM, vu ce qui est ecrit !  :heink:  
 
Voici le fichier PHP :  
------------------------------------------------------------------------------------
$xsl = new XSLTProcessor();
$xsl->importStyleSheet(DOMDocument::load($xsl_filename));
echo $xsl->transformToXML(DOMDocument::load($xml_filename));
------------------------------------------------------------------------------------
 
Et apres c'est du traitement <xsl:template ....... />
je commence à y voir clair ! Merci à tous.  :hello:


---------------
Pas oublier les glacons pour l'apero !!
n°1221296
omega2
Posté le 12-10-2005 à 16:06:36  profilanswer
 

DEns91 a écrit :

je viens d'alle faire un tour sur php.net, J'ai pas trop compris l'interret d'avoir integré sa à PHP. Sa marche parfaitement en ligne de commande je vois pas pourquoi ce prendre la tète a écrire 3 tonnes de code.

Ca marche aussi trés bien d'envoyer des mail en ligne de commande, la manipulation d'image aussi (certe, il faut avoir les bons utilitaire) ... alors pourquoi donc inclure tout ça dans php? La réponse est simple : tout le monde n'a pas accés aux fonction tels qu' "exec" et ce pour des raisons évidentes de sécurité.

n°1221305
FlorentG
Unité de Masse
Posté le 12-10-2005 à 16:09:47  profilanswer
 

DEns91 a écrit :

je viens d'alle faire un tour sur php.net, J'ai pas trop compris l'interret d'avoir integré sa à PHP. Sa marche parfaitement en ligne de commande je vois pas pourquoi ce prendre la tète a écrire 3 tonnes de code.


Il est marrant lui :D

n°1221381
djfx
Vive la biere !
Posté le 12-10-2005 à 17:23:39  profilanswer
 

Hop Hop ! On pourrit pas mon poste please !  :non:  
 
Dite moi plutot comment reccuperer les attributs de la balise en XSL (cms_id et name), c'est plus utile !  :)  
  <item_group cms_id="6527" name="Pulsar Evolution rackable">
 
------------------------
Bon j'ai trouvé, c'est bidon !  :D  
<xsl:value-of select="./@cms_id"/>


Message édité par djfx le 12-10-2005 à 17:27:53

---------------
Pas oublier les glacons pour l'apero !!
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  XML -> PHP : Ouai mais ....

 

Sujets relatifs
[résolu]Formulaire en PHPPHP 4.4.40 + mysql 5.0.13 incompatible entre elle ?
Déclencher une action à une heure précise en PHP ???Site multilingue - Php ou sous domaines ?
CSS généré par PHP reconnu par IE mais pas par Firefox??Comment faire un tri en PHP
[AIDE PHP] manque une ou 2 commandes sur mon script...Update d'un fichier XML (PHP 5)
Faire des gifs animés en PHP 
Plus de sujets relatifs à : XML -> PHP : Ouai mais ....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR