Discussion:
generer de l'xml
(trop ancien pour répondre)
luc2
2011-10-25 12:37:58 UTC
Permalink
salut,

vous me conseillez quoi comme librairies pour generer de l'xml ?
Paul Gaborit
2011-10-25 14:45:44 UTC
Permalink
À (at) 25 Oct 2011 12:37:58 GMT,
Post by luc2
vous me conseillez quoi comme librairies pour generer de l'xml ?
Sans plus de précisions sur le besoin : Template Toolkit.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
luc2
2011-10-27 10:15:11 UTC
Permalink
les templates, ca a l'air deja plus visuel comme methode... je vais essayer...
Post by Paul Gaborit
Sans plus de précisions sur le besoin : Template Toolkit.
Paul Gaborit
2011-10-27 14:54:02 UTC
Permalink
À (at) 27 Oct 2011 10:15:11 GMT,
Post by luc2
les templates, ca a l'air deja plus visuel comme methode... je vais essayer...
C'est très puissant pour générer tout type de documents textes (HTML,
CSS, LaTeX, XML, etc.) à partir de données diverses (issues par exemple
d'un SGBD). Par contre, ça ne garantit absolument pas la qualité du
résultat alors qu'avec les modules plus spécialisés (XML::LibXML par
exemple), vous êtes sûr de produire du XML bien formé.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
luc2
2011-11-02 15:33:27 UTC
Permalink
un truc que j'aime pas avec les templates, c'est que ca fait des lignes vides
de partout dans le resultat. exemple :

<trucmachin>
[% IF name %]
<name>[% name %]</name>
[% END]
</trucmachin>

resultat :

<trucmachin>

<name> y'a des lignes vides... ca m'enerve... </name>

</trucmachin>

y'a moyen d'eviter ca ?
Freddy Dissaux
2011-11-02 21:36:01 UTC
Permalink
Post by luc2
un truc que j'aime pas avec les templates, c'est que ca fait des lignes vides
<trucmachin>
[% IF name %]
<name>[% name %]</name>
[% END]
</trucmachin>
<trucmachin>
<name> y'a des lignes vides... ca m'enerve... </name>
</trucmachin>
y'a moyen d'eviter ca ?
En lisant la doc ?

http://template-toolkit.org/docs/manual/Config.html
(pre_chomp, post_chomp, trim...)
--
freddy <point> dsx <arobase> free <point> fr
Paul Gaborit
2011-11-02 20:54:56 UTC
Permalink
À (at) 02 Nov 2011 15:33:27 GMT,
Post by luc2
un truc que j'aime pas avec les templates, c'est que ca fait des lignes vides
<trucmachin>
[% IF name %]
<name>[% name %]</name>
[% END]
</trucmachin>
<trucmachin>
<name> y'a des lignes vides... ca m'enerve... </name>
</trucmachin>
y'a moyen d'eviter ca ?
Plusieurs méthodes qu'on peut combiner :

- Tout mettre sur une seule ligne ! ;-)

- Passer le résultat dans un formateur.

- Utiliser '[%-' et '-%]'. En gros, le '-' mange les espaces... Mais il
vaut mieux lire la doc pour bien comprendre.

- Utiliser les BLOCK pour factoriser le code.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
luc2
2011-11-03 14:12:11 UTC
Permalink
Post by Paul Gaborit
Post by luc2
un truc que j'aime pas avec les templates, c'est que ca fait des lignes vides
<trucmachin>
[% IF name %]
<name>[% name %]</name>
[% END]
</trucmachin>
<trucmachin>
<name> y'a des lignes vides... ca m'enerve... </name>
</trucmachin>
y'a moyen d'eviter ca ?
- Tout mettre sur une seule ligne ! ;-)
- Passer le résultat dans un formateur.
- Utiliser '[%-' et '-%]'. En gros, le '-' mange les espaces... Mais il
vaut mieux lire la doc pour bien comprendre.
- Utiliser les BLOCK pour factoriser le code.
j'y arriv' pas... j'ai fait ca :

<trucmachin>
[%- IF name %]
<name>[% name %]</name>
[%- END]
</trucmachin>

...mais je sens deja que vous allez me mettre 0/20...
Paul Gaborit
2011-11-03 15:28:22 UTC
Permalink
À (at) 03 Nov 2011 14:12:11 GMT,
Post by luc2
<trucmachin>
[%- IF name %]
<name>[% name %]</name>
[%- END]
</trucmachin>
...mais je sens deja que vous allez me mettre 0/20...
Moi ? Non. Mais Template Toolkit le fera tout seul : il y a une erreur
de syntaxe pour le END ! ;-)
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Paul Gaborit
2011-11-03 15:53:46 UTC
Permalink
À (at) Thu, 03 Nov 2011 16:28:22 +0100,
Post by Paul Gaborit
À (at) 03 Nov 2011 14:12:11 GMT,
Post by luc2
<trucmachin>
[%- IF name %]
<name>[% name %]</name>
[%- END]
</trucmachin>
...mais je sens deja que vous allez me mettre 0/20...
Moi ? Non. Mais Template Toolkit le fera tout seul : il y a une erreur
de syntaxe pour le END ! ;-)
Ci-dessous le lien vers la partie de la documentation qui explique tout
ça :

<http://template-toolkit.org/docs/manual/Config.html#section_PRE_CHOMP_POST_CHOMP>

Ça permet de comprendre l'usage de [%-, [%= et [%~...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
luc2
2011-11-04 08:52:17 UTC
Permalink
Post by Paul Gaborit
Post by Paul Gaborit
Post by luc2
<trucmachin>
[%- IF name %]
<name>[% name %]</name>
[%- END]
</trucmachin>
...mais je sens deja que vous allez me mettre 0/20...
Moi ? Non. Mais Template Toolkit le fera tout seul : il y a une erreur
de syntaxe pour le END ! ;-)
Ci-dessous le lien vers la partie de la documentation qui explique tout
<http://template-toolkit.org/docs/manual/Config.html#section_PRE_CHOMP_POST_CHOMP>
Ça permet de comprendre l'usage de [%-, [%= et [%~...
j'ai lu la doc, mais que ce soit [%- [%= ou [%~, je ne trouve pas le symbole
qui correspondrait a ce que je veux.
Paul Gaborit
2011-11-04 09:23:20 UTC
Permalink
À (at) 04 Nov 2011 08:52:17 GMT,
Post by luc2
j'ai lu la doc, mais que ce soit [%- [%= ou [%~, je ne trouve pas le symbole
qui correspondrait a ce que je veux.
J'ai bien regardé ma boule de cristal... mais je n'arrive pas à
distinguer ce que vous voulez !
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
luc2
2011-11-04 14:33:40 UTC
Permalink
Post by Paul Gaborit
Post by luc2
j'ai lu la doc, mais que ce soit [%- [%= ou [%~, je ne trouve pas le symbole
qui correspondrait a ce que je veux.
J'ai bien regardé ma boule de cristal... mais je n'arrive pas à
distinguer ce que vous voulez !
je veux ca :

<trucmachin>
<name> manuel dusapin </name>
</trucmachin>

je veux pas ca :

<trucmachin>

<name> y'a des lignes vides... ca m'enerve... </name>

</trucmachin>

evidemment, j'aimerais le faire correctement, comme un programmeur perl
experimente. une methode qui fonctionne ne me suffit pas.

ma methode fonctionne, mais je sens bien que c'est n'importe quoi :

<trucmachin>
[%- IF name %]
<name>[% name %]</name>
[%- END %]
</trucmachin>

si vous n'avez pas mieux, c'est pas grave, je me contenterai de ca. je ne vous
demande pas de chercher a ma place, je vous demandais juste au cas ou vous
auriez deja fait ca, et que vous auriez toujours la solution en tete.
Paul Gaborit
2011-11-04 15:29:05 UTC
Permalink
À (at) 04 Nov 2011 14:33:40 GMT,
Post by luc2
<trucmachin>
<name> manuel dusapin </name>
</trucmachin>
<trucmachin>
<name> y'a des lignes vides... ca m'enerve... </name>
</trucmachin>
evidemment, j'aimerais le faire correctement, comme un programmeur perl
experimente. une methode qui fonctionne ne me suffit pas.
<trucmachin>
[%- IF name %]
<name>[% name %]</name>
[%- END %]
</trucmachin>
Pourquoi est-ce n'importe quoi ? Pourquoi cette solution ne vous
convient-elle pas ? Comprenez-vous pourquoi elle fonctionne comme vous
le souhaitez ?
Post by luc2
si vous n'avez pas mieux, c'est pas grave, je me contenterai de ca. je ne vous
demande pas de chercher a ma place, je vous demandais juste au cas ou vous
auriez deja fait ca, et que vous auriez toujours la solution en tete.
Je pensais qui vous souhaitiez apprendre à vous servir de Template
Toolkit en général... et non que quelqu'un vous donne la solution à ce
petit problème particulier.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
luc2
2011-11-07 15:36:06 UTC
Permalink
Post by Paul Gaborit
Post by luc2
<trucmachin>
<name> manuel dusapin </name>
</trucmachin>
<trucmachin>
<name> y'a des lignes vides... ca m'enerve... </name>
</trucmachin>
evidemment, j'aimerais le faire correctement, comme un programmeur perl
experimente. une methode qui fonctionne ne me suffit pas.
<trucmachin>
[%- IF name %]
<name>[% name %]</name>
[%- END %]
</trucmachin>
Pourquoi est-ce n'importe quoi ? Pourquoi cette solution ne vous
convient-elle pas ? Comprenez-vous pourquoi elle fonctionne comme vous
le souhaitez ?
oui, je comprends. ce que je n'aime pas, c'est que ca sent le "gadget"; on
supprime des blancs pour que l'apparence finale corresponde a peu pres a ce que
l'on veut. ce n'est pas totalement parfait car ca mange des blancs de la ligne
precedente, et que ca laisse des blancs de la ligne courante :

<trucmachin> (blancs de la ligne precedente)
[%- IF name %] (blancs de la ligne courante)
<name>[% name %]</name>
[%- END %]
</trucmachin>

autre element qui me donne l'impression que c'est du "gadget" : la syntaxe
n'est pas symetrique; on a un tiret d'un cote, et pas de tiret de l'autre. on
dirait une parenthese ouvrante sans parenthese fermante. ca ne veut peut-etre
rien dire, mais c'est souvent a partir d'intuitions de ce genre que l'on se
doute qu'on fait fausse route.
Post by Paul Gaborit
Post by luc2
si vous n'avez pas mieux, c'est pas grave, je me contenterai de ca. je ne vous
demande pas de chercher a ma place, je vous demandais juste au cas ou vous
auriez deja fait ca, et que vous auriez toujours la solution en tete.
Je pensais qui vous souhaitiez apprendre à vous servir de Template
Toolkit en général... et non que quelqu'un vous donne la solution à ce
petit problème particulier.
pourquoi ? c'est interdit de demander de l'aide sur un probleme particulier ?
Klaus
2011-11-05 20:40:49 UTC
Permalink
Post by luc2
<trucmachin>
  <name> manuel dusapin </name>
</trucmachin>
<trucmachin>
  <name> y'a des lignes vides... ca m'enerve... </name>
</trucmachin>
evidemment, j'aimerais le faire correctement, comme un programmeur perl
experimente. une methode qui fonctionne ne me suffit pas.
use strict;
use warnings;

use XML::Writer;

open my $xml, '>', 'test.xml' or die $!;
my $wrt = XML::Writer->new(OUTPUT => $xml,
DATA_MODE => 1, DATA_INDENT => 2);

$wrt->startTag('trucmachin');
$wrt->dataElement('name', 'manuel dusapin');
$wrt->endTag('trucmachin');

$wrt->end;
close $xml;
Vincent Lefevre
2011-10-26 00:10:11 UTC
Permalink
Post by luc2
vous me conseillez quoi comme librairies pour generer de l'xml ?
XML::LibXML
--
Vincent Lefèvre <***@vinc17.net> - Web: <http://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)
Emmanuel Florac
2011-10-26 07:48:48 UTC
Permalink
Post by luc2
salut,
vous me conseillez quoi comme librairies pour generer de l'xml ?
Ça dépend à partir de quoi. XML::Simple est bien mais on ne contrôle pas
trop la sortie. Le mieux reste XML::LibXML, qui permet de tout faire.
--
The fact that a believer is happier than a sceptic is no more to the
point than the fact that a drunken man is happier than a sober one.
The happiness of credulity is a cheap and dangerous quality.
George Bernard Shaw
luc2
2011-10-27 10:09:26 UTC
Permalink
si je comprends bien, avec XML::LibXML, il faut creer des noeuds, ajouter des
enfants, definir les attributs... c'est pas tres visuel comme methode...

y'a pas une doc plus claire que
http://search.cpan.org/~shlomif/XML-LibXML-1.88/ ? j'comprends jamais par ou
commencer dans ce genre de docs...
Post by Emmanuel Florac
Ça dépend à partir de quoi. XML::Simple est bien mais on ne contrôle pas
trop la sortie. Le mieux reste XML::LibXML, qui permet de tout faire.
Emmanuel Florac
2011-10-27 14:51:43 UTC
Permalink
Post by luc2
y'a pas une doc plus claire que
http://search.cpan.org/~shlomif/XML-LibXML-1.88/ ? j'comprends jamais
par ou commencer dans ce genre de docs...
Voici une base de travail : une fonction qui prend un hash en paramètre,
et renvoie le XML qui représente la strructure du hash, y a pas plus
simple :)


# pour faire du XML
use XML::LibXML;
# pour garantir l'ordre des clefs de hash
use Tie::IxHash;
# conversion en UTF-8 nécessaire pour LibXML
use Unicode::String;

sub build_document {
#****f* build_document
# USAGE
# build_document(docroot=>{}.,..)
# EXAMPLE
# build_document(
# truc => {
# oper => "titi",
# status => "OK",
# },
# param => {
# role => "user",
# text => "toto",
# },
# target => {
# name => "target",
# sender => "envoyeur",
# },
# uri => {
# text => "URI",
# },
# comment => {
# text => "comment?"
# }
# );
#***
my %param;
tie %param, "Tie::IxHash";
%param = @_;

# ATTENTION $doc ne doit contenir que de l'UTF-8
my $doc = XML::LibXML->createDocument( "1.0", "ISO-8859-1" );

# root
my $root = $doc->createElement($rootelem);
$doc->setDocumentElement($root);

# attributs du root
while ( my ( $k, $v ) = each %$rootval ) {
$root->setAttribute( $k, $v );
}

# élements fils
while ( my ( $k, $v ) = each %param ) {
my $elem = $doc->createElement($k);

while ( my ( $subk, $subv ) = each %{$v} ) {
if ( $subk eq 'text' ) {

# conversion du contenu en UTF-8
Unicode::String->stringify_as('utf8');
$subv = Unicode::String::latin1($subv);

my $text = XML::LibXML::Text->new($subv);
$elem->addChild($text);
} else {
$elem->setAttribute( $subk, $subv );
}
}
$root->addChild($elem);
}
return $doc->toString(1);
}

1;
########
# fini.
--
Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs, and the Universe trying
to produce bigger and better idiots. So far, the Universe is winning.
Rich Cook
Klaus
2011-10-31 19:11:35 UTC
Permalink
Post by luc2
salut,
vous me conseillez quoi comme librairies pour generer de l'xml ?
XML::Writer https://metacpan.org/module/XML::Writer

ou

XML::MinWriter https://metacpan.org/module/XML::MinWriter
g***@gmail.com
2011-11-01 10:59:49 UTC
Permalink
Je te recommande XML::Writer.
Continuer la lecture sur narkive:
Loading...