use XML::Parser; $currentLine = 0; $parser = new XML::Parser(Handlers => {Start => \&start_handler, End => \&end_handler, Char => \&char_handler, Proc => \&proc_handler, XMLDecl => \&XMLDecl_handler, Final => \&final_handler}); $parser->parsefile("yourXML.xml"); sub XMLDecl_handler { $xmlString[$currentLine++] = ""; } sub start_handler { $xmlString[$currentLine] = $indent . "<$_[1]"; for ($i = 2; $i <= $#_ - 1; $i += 2){ $xmlString[$currentLine] .= " " . $_[$i] . "=\"". $_[$i + 1] . "\""; } $xmlString[$currentLine++] .= ">"; $indent .= " "; } sub end_handler { $indent = substr($indent, 0, length($indent) - 4); $xmlString[$currentLine++] = $indent . ""; } sub char_handler { if($_[1] =~ /[^ \n\t\r]/g) { $xmlString[$currentLine++] = $indent . "$_[1]"; } } sub proc_handler { $xmlString[$currentLine++] = ""; } sub final_handler { for ($i = 0; $i < $currentLine; $i++){ print $xmlString[$i] . "\n"; } }