#!/usr/bin/perl use strict; use warnings; use XML::Twig; my $tagname="ait:date-delivered"; my $att1="month"; my $att2="year"; my $att3="day"; changeTagAttrOrder(); sub changeTagAttrOrder { my $t= XML::Twig->new( output_filter=>'safe', twig_handlers => { '_default_' => sub { }, *[@att='type'] => \&changeTagAttrOrderHandler; }, pretty_print => 'indented', keep_atts_order => 1,#Tie::IxHash needs to be installed for this option to be available. ); $t->parse(\*DATA); $t->print; $t->purge; }#end of changeTagAttrOrder sub changeTagAttrOrderHandler { my( $t,$rootElt)= @_; my $curEltPath = $rootElt->path; if($curEltPath =~ m/$tagname/){ print "Found tag $tagname in path $curEltPath\n"; print $rootElt->att($att1)."\t".$rootElt->att($att2)."\t".$rootElt->att($att3); my $att1Val=$rootElt->att($att1); my $att2Val=$rootElt->att($att2); my $att3Val=$rootElt->att($att3); $rootElt->del_atts; print "after delete \tAttributes are ::".join(",",$rootElt->att_names())."\n"; $rootElt->set_atts( { $att1 => $att1Val, $att2 => $att2Val, $att3 => $att3Val}); print "after new set \tAttributes are ::".join(",",$rootElt->att_names())."\n"; } }#end of changeTagAttrOrderHandler __DATA__