Post by luc2y'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