From aef74127ef74114e7fb30d16037b810ed93635d7 Mon Sep 17 00:00:00 2001 From: zhouzhen1 Date: Sat, 3 Oct 2015 15:42:07 +0800 Subject: add support for having absolute path in internal xml file targets --- lib/Spreadsheet/ParseXLSX.pm | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/Spreadsheet/ParseXLSX.pm b/lib/Spreadsheet/ParseXLSX.pm index ad7f54c..f8daaae 100644 --- a/lib/Spreadsheet/ParseXLSX.pm +++ b/lib/Spreadsheet/ParseXLSX.pm @@ -714,6 +714,7 @@ sub _extract_files { my $wb_name = ($rels->find_nodes( qq ))[0]->att('Target'); + $wb_name =~ s/^\///; my $wb_xml = $self->_parse_xml($zip, $wb_name); my $path_base = $self->_base_path_for($wb_name); @@ -722,25 +723,35 @@ sub _extract_files { $self->_rels_for($wb_name) ); + my $get_path = sub { + my ($p) = @_; + if ($p !~ /^\//) { + return $path_base . $p; + } else { + $p =~ s/^\///; + return $p; + } + }; + my ($strings_xml) = map { - $zip->memberNamed($path_base . $_->att('Target'))->contents + $zip->memberNamed(&$get_path($_->att('Target')))->contents } $wb_rels->find_nodes(qq); my $styles_xml = $self->_parse_xml( $zip, - $path_base . ($wb_rels->find_nodes( + &$get_path(($wb_rels->find_nodes( qq - ))[0]->att('Target') + ))[0]->att('Target')) ); my %worksheet_xml = map { - if ( my $sheetfile = $zip->memberNamed($path_base . $_->att('Target'))->contents ) { + if ( my $sheetfile = $zip->memberNamed(&$get_path($_->att('Target')))->contents ) { ( $_->att('Id') => $sheetfile ); } } $wb_rels->find_nodes(qq); my %themes_xml = map { - $_->att('Id') => $self->_parse_xml($zip, $path_base . $_->att('Target')) + $_->att('Id') => $self->_parse_xml($zip, &$get_path($_->att('Target'))) } $wb_rels->find_nodes(qq); return { -- cgit v1.2.3-54-g00ecf