Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-04-2014 10:38:48

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Générer des xml simplement avez zf2

Bonjour,

A partir d'une base de donnée, je dois récupérer des informations et générer un xml avec un DOM très précis et spécifique. Dans zf2 existe-t-il un moyen de générer des xml simplement et de manière assez flexible ?

J'ai regardé Zend\Config\Writer sur le principe c'est ce qu'il me faudrait :

Code:

[lang=php]
// Create the config object
$config = new Zend\Config\Config(array(), true);
$config->production = array();

$config->production->webhost = 'www.example.com';
$config->production->database = array();
$config->production->database->params = array();
$config->production->database->params->host = 'localhost';
$config->production->database->params->username = 'production';
$config->production->database->params->password = 'secret';
$config->production->database->params->dbname = 'dbproduction';

$writer = new Zend\Config\Writer\Xml();
echo $writer->toString($config);

Mais c'est pour de la config uniquement non ? Car la manière de faire est assez élégante.
Y a t'il un module créée par quelqu'un qui me permettrait de faire ce travail ?
Je pose cette question pour en fait voir s'il y a une solution plus élégante que de générer son XML de cette manière.. :

Code:

[lang=php]

    $test = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
    <Document xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
    xsi:schemaLocation=\"blabla\"
    DocumentDate=\"$date_test\"
    DocumentNum=\"{{CODTEST}}\">" .PHP_EOL;

    $test .= "<Header DocTypCod=\"380\">" .PHP_EOL;
    $test .= "<BenefitDate><SimpleDate SimpleDateVal=\"$dt_valid\"/></BenefitDate>" .PHP_EOL;
    //...

J'ai déjà essayé la solution PHP avec :

Code:

[lang=php]
$dom = new \DomDocument("1.0", "UTF-8");

Mais c'est assez complexe pour un xml de grande taille. Si jamais vous avez besoin de plus d'info n'hésitez pas.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#2 24-04-2014 11:37:47

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

Et tu a un tableau à mettre en xml?
ou juste pleins de valeur à placer un peu "aléatoirement"?

Hors ligne

 

#3 24-04-2014 11:41:12

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Générer des xml simplement avez zf2

Je vais chercher grâce a mes requêtes plein de donnée dans ma base et je dois organiser un XML qui ordonne toutes ces données, je n'ai pas de tableau au préalable non.

J'ai regardé un peu le module XMLRpc, là il y a une partie Générator qui utilise le domDocument, on dirait que c'est une surcouche de cette classe mais cette partie me semble un peu légère et je ne sais même pas si ça pourrait convenir pleinement à ce que je veux.

Si tu as une idée à me donner n'hésites pas smile merci de ta réponse.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#4 24-04-2014 12:00:43

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

En fouillant un peu je suis tombé la dessus :

Code:

[lang=php]
<?php

$test_array = array (
  'bla' => 'blub',
  'foo' => 'bar',
  'another_array' => array (
    'buil' => 'myxml',
  ),
);
$xml = new SimpleXMLElement('<root/>');
array_walk_recursive($test_array, array ($xml, 'addChild'));
print $xml->asXML();

//donnerait:
<?xml version="1.0"?>
<root>
  <blub>bla</blub>
  <bar>foo</bar>
  <myxml>build</myxml>
</root>

ça impliquerai de créer ton tableau avant et ensuite de le convertir en xml...
c'est pas bien mieux mais j'ai pas de meilleure idée.. ^^

Hors ligne

 

#5 24-04-2014 12:24:51

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Générer des xml simplement avez zf2

Oui je vois, j'avais déjà vu un truc du genre de passer par un array et le convertir en xml.
Via cette méthode l'inconvénient, c'est pour construire des balises de ce type :

Code:

<mesLines>
    <line lineNum="monNum">

    </line>
    <line lineNum="monNum2">

    </line>
</mesLines

Et ces <line> seront générés par un foreach...Comme mon post sur sdz le montre :
http://fr.openclassrooms.com/forum/suje … e-85465183

Avec DomDocument en fait j'ai un début de résultat, sauf que le code est déjà très long pour a peine 30% du Xml traité. L'ajout de child, de paramètre etc... pour 30% du xml je dois être à 300 lignes de code.

C'est pour cela que ma question de savoir si Zend avait déjà un module, fonctionnalité qui permettrait de faire un truc moins complexe tout en ne perdant pas de flexibilité, ou si il faut le créer.

Merci pour ta réponse.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#6 24-04-2014 16:26:47

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

Et bien pas à ma connaissance,
dsl ^^


EDIT : De ce que j'en ai vu en regardant un peu pour ton problème, tu sera obligé de passer par DomDocument =x

Dernière modification par flobrflo (24-04-2014 16:38:22)

Hors ligne

 

#7 07-05-2014 09:48:16

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Générer des xml simplement avez zf2

Ok merci beaucoup d'avoir regardé (je viens de me re-pencher sur le soucis).

DomDoucment hum.... faut que je maîtrise cette classe sur le bout des ongles pour faire un truc optimisé en gros car un générateur qui fait plus de 1000 lignes autant le faire en procédural et gérer la génération avec une chaîne concaténé non ? :p


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#8 07-05-2014 10:16:19

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

ben tout dépend avec ce dont tu es le plus à l'aise et s'il y a un certains modèle qui se répète dans tes 1000 lignes ^^
Tu t'en sortira certainement bien avec plusieurs boucles imbriquées smile

Hors ligne

 

#9 07-05-2014 10:39:36

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Générer des xml simplement avez zf2

c'est plutôt pour construire l'arbo ou je vais souvent répéter les createElement et les appendChild & les setAttribute... C'est surtout sur ce point ou j'aurais aimé optimiser le truc à la manière de Zend\Config\Writer
faire :

Code:

[lang=php]
    $config = new Zend\Config\Config(array(), true);
    $config->production = array();
 
    $config->production->webhost = 'www.example.com';
    $config->production->database = array();
    $config->production->database->params = array();
    $config->production->database->params->host = 'localhost';

Est plus simple que de faire :

Code:

[lang=php]
$dom = new \DomDocument("1.0", "UTF-8");
$document = $dom->createElementNS('http://www.w3.org/2001/XMLSchema-instance', 'Document');
$dom->appendChild($document);
$docHeader          = $dom ->createElement('Header');
$document                  ->appendChild($docHeader);
$docHeader                 ->setAttribute('blabla1', '');
$docHeader                 ->setAttribute('blabla2', '');
$testDate           = $dom ->createElement('TestDate');
$docHeader                 ->appendChild($testDate);
//etc....

Dans le principe Zend\Config\Writer est génial, mais il ne gère pas les setAttribute et il n'a l'air prévu que pour générer des configurations, il ne peut pas être détourné si ?
Le but surtout c'est de faire un code propre épuré et maintenable... j'en demande beaucoup je sais lol.

Apres faire des boucles pour générer les mêmes ligne ce sera au final qu'une petite partie.

Edit : Bien joué pour ton 200ème message au fait flobrflo

Dernière modification par JGreco (07-05-2014 10:41:37)


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#10 07-05-2014 11:15:45

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

Oh merci, j'avais pas fait gaf. ^^

Non tu pourra pas adapter Config\Writter facilement. Il reconnait que certains mots clef =x

après tu peu peu être tenter une construction par tableau:

Code:

[lang=php]
$xml = array();
$xml['Header'] = array('blabla1','blabla2');
$xml['TestDate']['value_date'];
...

puis rajouter une petite fonction récursive pour construire ton xml à parti d'un grand tableau comme celui ci.

Dernière modification par flobrflo (07-05-2014 11:16:29)

Hors ligne

 

#11 07-05-2014 12:01:12

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Générer des xml simplement avez zf2

Les tableaux ! Option intéressante ! Il existe plein de chose sur le net pour faire cela je pense :

https://code.google.com/p/array-to-domdocument/

Que ceci peut être une bonne option...

Mes recherches ont aussi porté sur ce post là :

http://www.devexp.eu/2009/04/11/php-dom … ay-to-xml/

Mais ce post étant vieux je suis sceptique surtout qu'il ne gère pas les attributs.

Bref solution intéressante je vais creuser un peu, si j'ai des questions, problèmes etc.. je reviendrais sur ce post.

Merci pour ton partage smile


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#12 07-05-2014 12:30:50

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

Wé je pense que c'est ce qu'il y a de plus adapté à ta demande. ^^

Par contre si tu trouve une lib qui fait comme config\writer un de ces jours.. hésite pas à poster =d

Hors ligne

 

#13 07-05-2014 12:40:07

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Générer des xml simplement avez zf2

Ce serait trop bien en effet !  Approche full objet etc... ce serait bien que dans le Zf3 il y pense quand même :p d'améliorer Zend\Config\Writer pour générer des xml tout court.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#14 07-05-2014 14:12:47

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

bah rien de t'empêche de faire un module pour X_X

Hors ligne

 

#15 07-05-2014 14:41:46

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Générer des xml simplement avez zf2

On va attendre que je progresse alors y a du boulot lol !!!


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#16 07-05-2014 15:18:35

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

^^

Je regardais un peu pour rigoler. A mon avis c'est pas vraiment possible.
Faudrait surcharger l'accesseur -> donc créer une extension php. (et ce même si tu voulais mettre un autre signe à la place)

et même avec une fonction, tu ne peu pas faire un truc du style:
$xml->an(header)->an(title)->an(ok);

Donc.. à part les tableaux je vois pas

Hors ligne

 

#17 07-05-2014 16:31:12

Blount
Membre
Date d'inscription: 23-06-2009
Messages: 98
Site web

Re: Générer des xml simplement avez zf2

Il y a aussi SimpleXML avec SimpleXMLElement.
Pour ton utilisation, il sera peut-être plus performant que DomDocument.

Hors ligne

 

#18 07-05-2014 16:34:58

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Générer des xml simplement avez zf2

J'avais vérifié avec SimpleXML quand je voulais fair un foreach sur lines possédant plusieurs line il refusait car il ne pouvais pas dupliquer dans ce sous element le même nom d'element.

J'avais peut être mal fait mon affaire. Mais je crois depuis que ce n'est pas ce que je veux. Si jamais tu y arrive avec SimpleXML cela m'intérrèsse :p

Merci pour vos retours en tous cas !!


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#19 07-05-2014 16:36:55

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

Bah pour SimpleXML il faut que tu fasse ton tableau avant, bien comme il faut, puis que tu génère le xml à la fin.

Hors ligne

 

#20 07-05-2014 16:50:15

Blount
Membre
Date d'inscription: 23-06-2009
Messages: 98
Site web

Re: Générer des xml simplement avez zf2

Effectivement, avec :

Code:

[lang=php]<?php

$xml = new SimpleXMLElement("<lines></lines>");
$xml->line = "Ca marche ?";
$xml->line = "Ca marche ?";

echo $xml->asXML();

Ça fonctionne mais on a un seul élément <line> dans le rendu XML.

ALors, par réflexe, je me suis demandé si la notation en tableau fonctionnerai :

Code:

[lang=php]<?php

$xml = new SimpleXMLElement("<lines></lines>");
$xml->line[0] = "Ca marche ?";
$xml->line[1] = "Ca marche ?";

echo $xml->asXML();

Et ça fonctionne :

Code:

[lang=xml]<?xml version="1.0"?>
<lines>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
</lines>

Et encore mieux, tu peux chainer :

Code:

[lang=php]<?php

$xml = new SimpleXMLElement("<lines></lines>");
for ($i = 0; $i < 10; $i++) {
    $xml->line[$i] = "Ca marche ?";
}

$xml->test->testEncore->encore = "Là aussi";

echo $xml->asXML();

Rendu :

Code:

[lang=xml]<?xml version="1.0"?>
<lines>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
    <line>Ca marche ?</line>
    <test>
        <testEncore>
            <encore>L&#xE0; aussi</encore>
        </testEncore>
    </test>
</lines>

Pas mal hein.
C'est ce que tu veux non ?

Dernière modification par Blount (07-05-2014 16:51:40)

Hors ligne

 

#21 07-05-2014 16:57:45

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

Ah wé, pas mal le dernier exemple, j'étais pas encore tombé dessus..

EDIT : Parcontre si tu veux un encore2 dans testEncore c'est pas possible si?
EDIT 2 : en passant un tableau après ->testEncore par exemple ^^

Dernière modification par flobrflo (07-05-2014 17:02:32)

Hors ligne

 

#22 07-05-2014 17:07:23

Blount
Membre
Date d'inscription: 23-06-2009
Messages: 98
Site web

Re: Générer des xml simplement avez zf2

Pourquoi pas possible ?

Code:

[lang=php]
$xml->test->testEncore->encore = "Là aussi";
$xml->test->testEncore2 = "un autre";

ou encore :

Code:

[lang=php]
$xml->test->testEncore[0]->encore = "Là aussi";
$xml->test->testEncore[1] = "un autre";

Je pense qu'on peut tout faire.

Dernière modification par Blount (07-05-2014 17:08:18)

Hors ligne

 

#23 07-05-2014 17:12:08

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Générer des xml simplement avez zf2

Ah we oki, j'ai regardé en vitesse du coup j'avais manqué un détails xD

Code:

[lang=php]
$xml->test[0]->testEncore->encore = "Là aussi";
$xml->test[0]->testEncore2 = "un autre";
$xml->test[1]->testEncore = "test 2";

Bon ok c'est plutot joli, à voir ce que ça vaut sur une grosse génération de xml.
J'espère que JGreco nous dira ce que ça vaut =d

Hors ligne

 

#24 07-05-2014 17:12:52

Blount
Membre
Date d'inscription: 23-06-2009
Messages: 98
Site web

Re: Générer des xml simplement avez zf2

On peut aussi gérer les attributs via tableau associatif ;

Code:

[lang=php]
<?php

$xml = new SimpleXMLElement("<lines></lines>");
$xml->test->testEncore[0]->encore = "Là aussi";
$xml->test->testEncore[1] = "un autre";
$xml->test->testEncore[1]["test"] = "ok";
echo $xml->asXML();

Code:

[lang=xml]
<?xml version="1.0"?>
<lines>
    <test>
        <testEncore>
            <encore>L&#xE0; aussi</encore>
        </testEncore>
        <testEncore test="ok">un autre</testEncore>
    </test>
</lines>

Hors ligne

 

#25 07-05-2014 18:14:22

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Générer des xml simplement avez zf2

OUhaaaaaaaaa !!! J'aime bcp sur le papier c'est prometteur !!!

Je teste cela dès que possible et je vous fait un feedback complet :p
Merci à vous pour cela

Dernière modification par JGreco (07-05-2014 18:14:36)


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages