mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-30 09:36:41 +00:00
84 lines
2.6 KiB
Perl
84 lines
2.6 KiB
Perl
#!/usr/bin/perl
|
|
# IBM(c) 2021 EPL license http://www.eclipse.org/legal/epl-v10.html
|
|
#
|
|
# This module extends XML::Simple class.
|
|
#
|
|
# For versions of XML::Simple class which implement new_xml_parser():
|
|
# Overwrite XML::Simple::new_xml_parser() to pass parser options
|
|
# directly to the XML::Parser. The passing of parser options with
|
|
# XML::Simple::XMLin() has been depricated.
|
|
#
|
|
#
|
|
# For older versions of XML::Simple class which do not implement new_xml_parser():
|
|
# Overwrite XML::Simple::build_tree_xml_parser() to pass parser options
|
|
# directly to the XML::Parser. The passing of parser options with
|
|
# XML::Simple::XMLin() has been depricated.
|
|
#
|
|
package xCAT::XML;
|
|
use XML::Simple;
|
|
use xCAT::MsgUtils;
|
|
use Carp;
|
|
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
|
|
use parent 'XML::Simple';
|
|
|
|
sub build_tree_xml_parser {
|
|
my $self = shift;
|
|
my $filename = shift;
|
|
my $string = shift;
|
|
|
|
# Check if parent class XML::Simple has implemented new_xml_parser(),
|
|
# if it has, just call XML::Simple::build_tree_xml_parser() from parent
|
|
# and it in turn will call new_xml_parser() overwritten by this module.
|
|
#
|
|
# If parent class XML::Simple does not have new_xml_parser() implemented,
|
|
# fall through and execute the build_tree_xml_parser() overwritten
|
|
# by this module.
|
|
#
|
|
if (exists &{XML::Simple::new_xml_parser}) {
|
|
return $self->SUPER::build_tree_xml_parser($filename, $string);
|
|
}
|
|
|
|
eval {
|
|
local($^W) = 0; # Suppress warning from Expat.pm re File::Spec::load()
|
|
require XML::Parser; # We didn't need it until now
|
|
};
|
|
if($@) {
|
|
croak "XMLin() requires either XML::SAX or XML::Parser";
|
|
}
|
|
|
|
if($self->{opt}->{nsexpand}) {
|
|
carp "'nsexpand' option requires XML::SAX";
|
|
}
|
|
|
|
my $xp = XML::Parser->new(Style => 'Tree',
|
|
[ load_ext_dtd => 0,
|
|
ext_ent_handler => undef,
|
|
no_network => 1,
|
|
expand_entities => 0,
|
|
]);
|
|
my($tree);
|
|
if($filename) {
|
|
# $tree = $xp->parsefile($filename); # Changed due to prob w/mod_perl
|
|
open(my $xfh, '<', $filename) || croak qq($filename - $!);
|
|
$tree = $xp->parse($xfh);
|
|
}
|
|
else {
|
|
$tree = $xp->parse($$string);
|
|
}
|
|
|
|
return($tree);
|
|
}
|
|
|
|
sub new_xml_parser {
|
|
my($self) = @_;
|
|
my $xp = XML::Parser->new(Style => 'Tree',
|
|
[ load_ext_dtd => 0,
|
|
ext_ent_handler => undef,
|
|
no_network => 1,
|
|
expand_entities => 0,
|
|
]);
|
|
$xp->setHandlers(ExternEnt => sub {return $_[2]});
|
|
return $xp;
|
|
}
|
|
1;
|