Perl et les fichiers XML
Créer des fichiers XML en Perl
Pour créer des fichiers XML, il existe un module très simple à prendre en main : XML::Writer. Il est simple à installer et à utiliser. Notez qu’il est aussi possible de créer des fichiers XML à l’aide des modules de parsing recommandés ci-dessus (XML::Twig, XML::LibXML…).
XML::Writer
Voici un exemple de script.
XMLWriter.pl #!/usr/bin/perl use XML::Writer; use IO::File; my $output = new IO::File(« >output.xml »); my $writer = new XML::Writer( OUTPUT => $output, DATA_INDENT => 3, # indentation, trois espaces DATA_MODE => 1, # changement ligne. ENCODING => ‘utf-8’, );
$writer->xmlDecl(« UTF-8 »); $writer->startTag(« data »); $writer->startTag( « greeting », « class » => « simple » ); $writer->characters(« Hello, world! »); $writer->endTag(« greeting »);
Perl et les fichiers XML par djibril (site personnel) Nicolas Vallée (Home page)
XMLWriter.pl $writer->startTag( « toto », « name » => « att1 » ); $writer->characters(« data1 »); $writer->endTag(« toto »); $writer->comment(« Un commentaire »); $writer->emptyTag( ‘toto’, ‘name’ => ‘att2.jpg’ ); $writer->endTag(« data »); $writer->end(); $output->close();
output.xml <?xml version= »1.0″ encoding= »UTF-8″?> <data> <greeting class= »simple »>Hello, world!</greeting> <toto name= »att1″>data1</toto> <!– Un commentaire –> <toto name= »att2.jpg » /> </data>
Voilà, ce n’est pas compliqué !
Valider ses fichiers XML
Pour valider ces fichiers XML, certaines personnes vous diront qu’il faut utiliser un parseur XML. En effet, tout bon parseur XML vérifiera que votre fichier respecte la syntaxe XML. Mais, il ne sera pas obligé de valider la conformité avec sa/ses DTD et/ou à son/ses XSD (s’il y en a ). On parlera dans ce cas de parseurs non validants. Quoi qu’il en soit, il existe des modules vous permettant de vérifier qu’un fichier XML est conforme à une DTD, un XSD ou même Schematron.
Valider une DTD
Les modules les plus utilisés sont XML::Checker::Parser et XML::LibXML déjà évoqués ci-dessus. Voici un exemple de script utilisant XML::Checker::Parser.
#!/usr/bin/perl use XML::Checker::Parser; $XML::Checker::FAIL = \&my_fail; my $FichierXML = ‘ExempleXML.xml’; my $xp = new XML::Checker::Parser(); $xp->parsefile($FichierXML); sub my_fail { my $code = shift; die(« [WARNING] Le fichier $FichierXML est non valide\n\t@_\n »); }
Vous pouvez créer une procédure avec ce code afin de valider à la volée vos fichiers XML.
Valider une XSD
Les modules les plus utilisés sont XML::Validator::Schema et XML::LibXML déjà évoqués ci-dessus. Voici un exemple de script utilisant XML::Validator::Schema.
#!/usr/bin/perl use XML::SAX::ParserFactory;
Perl et les fichiers XML par djibril (site personnel) Nicolas Vallée (Home page)
use XML::Validator::Schema; my $FichierXSD = ‘ExempleXML.xsd’; my $document = ‘ExempleXML.xml’; my $validator = XML::Validator::Schema->new( file => $FichierXSD ); my $parser = XML::SAX::ParserFactory->parser( Handler => $validator ); eval { $parser->parse_uri($document); }; die $@ if $@; print « Le fichier $document est valide\n »;
Vous pouvez créer une procédure avec ce code afin de valider à la volée vos fichiers XML.