use strict;
use warnings;
use XML::Parser;
use XML::Twig;
my $xmlfile = 'input1.xml'; # the file to parse
# initialize parser object and parse the string
my $parser = XML::Parser->new( ErrorContext => 2 );
eval { $parser->parsefile( $xmlfile ); };
# report any error that stopped parsing, or announce success
if( $@ )
{
$@ =~ s/at \/.*?$//s; # remove module line number
print STDERR "\nERROR in '$xmlfile':\n$@\n";
exit;
}
my $twig=XML::Twig->new(twig_handlers=>{
# indd_document=>\&root_process
+,
# div => \&div_handler,
# content => \&content_handler,
});
$twig->parsefile( $xmlfile);
open(FH,">output.xml") or die "cannot open output.xml: $!";
my $temp = $twig->toString;
print FH $temp;
close (FH);
$twig->purge;
#root tag "indd_document" process here
sub root_process
{
my( $twig, $root)= @_;
$root->set_tag( 'document');
$root->set_atts({OutputCreationDate=>'20090510', OutputCreationT
+ime=>'00:00:00', 'xml:space'=>"preserve"});
$root->purge;
}
#paragraph element process goes here
sub div_handler {
my ($twig, $div)= @_;
$div->set_tag('paragraph');
$div->del_att('cstyID','pstyID');
my $attval=$div->att('class');
$attval=~s/P_//;
$div->set_att(style => $attval);
$attval=~s/_//g;
$attval="P".$attval;
$div->set_att(class =>$attval);
$div->purge;
}
#content tag handler
sub content_handler
{
my ($twig, $content)= @_;
#For textbox element
if($content->{'att'}->{'type'} eq "text")
{
$content->set_tag('textbox');
$content->del_atts;
$content->set_atts({bid=>'', aid=>'', att=>'', pgnbr=>'', pgsect=>
+'', spp=>'', spf=>'', top=>'', left=>'', height=>'', bh=>'', width=>'
+', bw=>'', colums=>'', gutter=>'', ts=>'', ls=>'', bs=>'', rs=>'', t=
+>'', l=>'', b=>'', r=>'', tit=>'', til=>'', tib=>'', tir=>'', color=>
+'', cn=>'', framewidth=>'', framecolor=>'', fcn=>'', grp=>''});
}
$content->purge;
}
|