####
##
##
use XML::Twig;
# Learning XML testing functions
ReadBooksInfo('books.xml','filter.xml');
sub ReadBooksInfo{
my $books_name = shift;
my $filter_name = shift;
my $filter_tree;
my $books_tree= new XML::Twig(
TwigHandlers => {
Title =>
sub {
my( $titletwig, $title_ele ) = @_; my $titlename = $title_ele->att('Name');
my $unique_titlename = CreateUniqueFilterName($filtername);
print "\nGenerated unique title name: ", $unique_titlename;
print "\n";
$title_ele->set_att( Name => "$unique_titlename ");
$filter_tree= new XML::Twig(
TwigHandlers => {
qq[Title[\@Name="$titlename"]] =>
sub {
my ( $tree, $element ) = @_;
$element->set_att( Name => "$unique_titlename" );
$element->print;
}
}
);
$filter_tree->parsefile($filter_name);
}
}
);
$filter_tree->parsefile( $books_name );
$filter_tree->print;
$books_tree->print;
}
# Create unique filter names
# ===========================
sub CreateUniqueFilterName {
my $user_filter_name = shift;
my $lower=1000;
my $upper=2000000;
my $random = int(rand( $upper - $lower + 1 ) ) + $lower;
my $unique_filter_name = $user_filter_name . "_". "$$". "_". "$^T" . "_" .$random;
}