note
Anonymous Monk
<p> [mod://XML::Rules], [href://https://metacpan.org/module/XML::Rules#inferRulesFromExample], [href://https://metacpan.org/source/JENDA/XML-Rules-1.16/bin/xml2XMLRules.pl|xml2XMLRules], [mod://Data::Diver] :) [id://69927|references quick reference]
<p> <readmore><c>#!/usr/bin/perl --
use strict;
use warnings;
use XML::Rules;
use Data::Dump qw/ dd /;
use Data::Diver qw/ Dive /;
my $rawxml = q{<?xml version="1.0" encoding="UTF-8"?>
<config>
<log>
<destination>e1@mail.de</destination>
<destination>e2@mail.de</destination>
<destination>e3@mail.de</destination>
</log>
<item>
<id>0</id>
<filename>file1</filename>
<extension>txt</extension>
</item>
<item>
<id>1</id>
<filename>file2</filename>
<extension>txt</extension>
</item>
</config>
};
my $no_rules = XML::Rules->new( rules => [], )->parse( $rawxml );
dd( $no_rules );
my $xr = XML::Rules->new(
qw/ stripspaces 8 /,
#~ xml2XMLRules foo.xml
#~ xml2XMLRules.bat foo.xml
#~
#~ rules => XML::Rules->inferRulesFromExample( $rawxml ),
rules => {
'extension,filename,id' => 'content',
'config,log' => 'no content',
'destination' => 'content array',
'item' => 'as array no content'
},
);
my $ret = $xr->parse( $rawxml );
dd( $ret );
my $config = $ret->{config};
dd({ DESTINATIONS => int @{ $config->{log}{destination} } });
use Data::Diver qw/ Dive /;
if( my $destinations = Dive( $ret, qw/ config log destination / ) ){
dd( { DESTINATIONS => int @$destinations, } );
}
__END__
{
config => {
_content => "\n\t\n\t\n\t\n",
item => {
_content => "\n\t\t\n\t\t\n\t\t\n\t",
extension => { _content => "txt" },
filename => { _content => "file2" },
id => { _content => 1 },
},
log => {
_content => "\n\t\t\n\t\t\n\t\t\n\t",
destination => { _content => "e3\@mail.de" },
},
},
}
{
config => {
item => [
{ extension => "txt", filename => "file1", id => 0 },
{ extension => "txt", filename => "file2", id => 1 },
],
log => { destination => ["e1\@mail.de", "e2\@mail.de", "e3\@mail.de"] },
},
}
{ DESTINATIONS => 3 }
{ DESTINATIONS => 3 }
</c>
</readmore>
1045086
1045086
5