--- lib/A3C/AAIEduHr.pm 2008/04/29 19:54:52 88 +++ lib/A3C/AAIEduHr.pm 2008/04/29 21:43:36 89 @@ -16,12 +16,12 @@ #use base 'Jifty::Object'; -use XML::Simple; +use XML::Rules; use Data::Dump qw/dump/; use File::Slurp; use JSON::XS; -sub available { +sub vocabulary { my $self = shift; my $name = shift; @@ -53,23 +53,36 @@ my $data; if ( ! -e $data_path ) { - my $xs = XML::Simple->new; - $data = $xs->XMLin($xml_path, -# KeyAttr => { vocabularyentry => 'key' }, - ContentKey => '-content', - ) || die "can't parse $xml_path: $!"; + my $rules = XML::Rules->new( rules => [ + _default => sub { + my ($tag_name, $tag_hash, $context, $parent_data) = @_; + warn "_default $tag_name ",dump( $tag_hash ); + return; + }, + vocabulary => 'no content', + vocabularyentry => sub { + die "no key attribute?" unless defined( $_[1]->{key} ); + '@' . $_[0] => $_[1]->{key}; + }, + ]); + $data = $rules->parsefile( $xml_path ) + || die "can't parse $xml_path: $!"; + + $data = $data->{vocabulary} || die "no vocabulary in data: ", dump( $data ); write_file( $data_path, encode_json( $data )) || die "can't save into $data_path: $!"; Jifty->log->info("saved dump into $data_path"); } else { $data = decode_json( read_file( $data_path ) ) || die "can't read $data_path: $!"; + Jifty->log->info("loaded dump from $data_path"); } warn '## ',ref($data),' = ',dump($data); die "data not for for $name" unless $data->{name} eq $name; + warn "no vocabularyentry for $name from $data_path" unless defined( $data->{vocabularyentry} ); - return $data; + return $data->{vocabularyentry}; } warn "# AAUEduHr loaded\n";