3 | 3 |
# Pod stripped from pm file by OODoc 2.00.
|
4 | 4 |
package XML::LibXML::Simple;
|
5 | 5 |
use vars '$VERSION';
|
6 | |
$VERSION = '0.90';
|
|
6 |
$VERSION = '0.91';
|
7 | 7 |
|
8 | 8 |
use base 'Exporter';
|
9 | 9 |
use strict;
|
|
153 | 153 |
|
154 | 154 |
$opt{searchpath} ||= [];
|
155 | 155 |
ref $opt{searchpath} eq 'ARRAY'
|
156 | |
or $opt{searchpath} = [ $opt{searchpath} ];
|
157 | |
|
158 | |
my $fa = delete $opt{forcearray};
|
159 | |
my @fa = ref $fa eq 'ARRAY' ? @$fa : defined $fa ? $fa : ();
|
160 | |
$opt{forcearray_always} = (@fa==1 && !ref $fa[0] && $fa[0]);
|
161 | |
$opt{forcearray_regex} = [ grep {ref $_ eq 'Regexp'} @fa ];
|
162 | |
|
163 | |
$opt{forcearray_elem} = {};
|
164 | |
$opt{forcearray_elem}{$_} = 1 for grep !ref $_, @fa;
|
|
156 |
or $opt{searchpath} = [ $opt{searchpath} ];
|
|
157 |
|
|
158 |
my $fa = delete $opt{forcearray} || 0;
|
|
159 |
my (@fa_regex, %fa_elem);
|
|
160 |
if(ref $fa)
|
|
161 |
{ foreach (ref $fa eq 'ARRAY' ? @$fa : $fa)
|
|
162 |
{ if(ref $_ eq 'Regexp') { push @fa_regex, $_ }
|
|
163 |
else { $fa_elem{$_} = 1 }
|
|
164 |
}
|
|
165 |
}
|
|
166 |
else { $opt{forcearray_always} = $fa }
|
|
167 |
$opt{forcearray_regex} = \@fa_regex;
|
|
168 |
$opt{forcearray_elem} = \%fa_elem;
|
165 | 169 |
|
166 | 170 |
# Special cleanup for {keyattr} which could be arrayref or hashref,
|
167 | 171 |
# which behave differently.
|
|
225 | 229 |
|
226 | 230 |
if(defined $d->{$k})
|
227 | 231 |
{ # Combine duplicate attributes into arrayref if required
|
228 | |
if(ref $d->{$k} eq 'ARRAY')
|
229 | |
{ push @{$d->{$k}}, $v }
|
230 | |
else { $d->{$k} = [ $d->{$k}, $v ] }
|
231 | |
}
|
232 | |
elsif(ref $v eq 'ARRAY')
|
233 | |
{ push @{$d->{$k}}, $v }
|
|
232 |
if(ref $d->{$k} eq 'ARRAY') { push @{$d->{$k}}, $v }
|
|
233 |
else { $d->{$k} = [ $d->{$k}, $v ] } }
|
|
234 |
elsif(ref $v eq 'ARRAY') { push @{$d->{$k}}, $v }
|
234 | 235 |
elsif(ref $v eq 'HASH'
|
235 | 236 |
&& $k ne $opts->{contentkey}
|
236 | |
&& $opts->{forcearray_always})
|
237 | |
{ push @{$d->{$k}}, $v }
|
|
237 |
&& $opts->{forcearray_always}) { push @{$d->{$k}}, $v }
|
238 | 238 |
elsif($opts->{forcearray_elem}{$k}
|
239 | 239 |
|| grep {$k =~ $_} @{$opts->{forcearray_regex}}
|
240 | |
)
|
241 | |
{ push @{$d->{$k}}, $v }
|
242 | |
else
|
243 | |
{ $d->{$k} = $v;
|
244 | |
}
|
|
240 |
) { push @{$d->{$k}}, $v }
|
|
241 |
else { $d->{$k} = $v }
|
245 | 242 |
$d->{$k};
|
246 | 243 |
}
|
247 | 244 |
|