I was referring to the yaml, and FWIW, ysh doesn't like that YAML, which I assume is supposed to be
ysh > ---
yaml> Outpatient_Services:
yaml> Outpatient_Service:
yaml> - AM11: 1
yaml> - AM07: 1
yaml> - AM04: 1
yaml> ...
$VAR1 = {
'Outpatient_Services' => {
'Outpatient_Service' => [
{
'AM11' => '1'
},
{
'AM07' => '1'
},
{
'AM04' => '1'
}
]
}
};
This is what I came up with, which took waaay too long, the rules are hard to remember
#!/usr/bin/perl --
use strict; use warnings;
use XML::Rules;
use Data::Dump qw/ dd /;
my $ta = XML::Rules->new(
qw/ stripspaces 8 /,
rules => {
'Outpatient_Services' => 'no content',
'Outpatient_Service' => 'as array no content',
#~ 'Outpatient_Clinic' => 'content by AM_Key',
'Outpatient_Clinic' => sub {
#~ $rule->( $tag_name, \%attrs, \@context, \@parent_data, $parser)
#~ my ($tagname, $attrHash, $contexArray, $parentDataArray, $parser) =
+ @_;
my $amk = $_[1]->{AM_Key} ;
return unless $amk;
{ $amk => 1 };
},
#~ _default => sub { $_[0] => $_[1]->{_content} },
_default => 'content',
'Outpatient_Clinic_Special' => undef,
},
);
my $ref = $ta->parsefile( 'pm1002448.xml' );
dd $ref;
use YAML(); print YAML::Dump( $ref);
__END__
{
Outpatient_Services => {
Outpatient_Service => [
{ AM01 => 1 },
{ AM01 => 1 },
{ AM02 => 1 },
{},
{ AM04 => 1 },
{},
],
},
}
---
Outpatient_Services:
Outpatient_Service:
- AM01: 1
- AM01: 1
- AM02: 1
- {}
- AM04: 1
- {}
| [reply] [d/l] [select] |
Thank you very much! I noticed now ( but somewhat late :-) ) that your point was yaml output. I have corrected the output presentation in the original post and in the reply to your post.
My main problem however ist that I need to represent the LK-Keys at the same hierarchy level as the AM-Keys. That is, I do need the Outpatient_Clinic_Special infos.
Thank you again for your time I will try to build on your code.
| [reply] |
my $amlk = sub {
print $_->xpath, "\n";
push @amk, $_->trimmed_text;
};
Then register some twig_handlers
'AM_Key' => $amlk,
'LK_Key' => $amlk,
| [reply] [d/l] [select] |