61 lines
1.3 KiB
Perl
61 lines
1.3 KiB
Perl
|
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});
|
||
|
|
||
|
$file = "yourName.xml";
|
||
|
|
||
|
eval {
|
||
|
$parser->parsefile($file);
|
||
|
};
|
||
|
|
||
|
if($@) {
|
||
|
print "Error in $file: " . (substr $@, 0, index($@, ", byte")) . "\n";
|
||
|
exit(1);
|
||
|
};
|
||
|
|
||
|
sub XMLDecl_handler
|
||
|
{
|
||
|
$xmlString[$currentLine++] = "<?xml version=\"$_[1]\"?>";
|
||
|
}
|
||
|
|
||
|
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 . "</$_[1]>";
|
||
|
}
|
||
|
|
||
|
sub char_handler
|
||
|
{
|
||
|
if($_[1] =~ /[^ \n\t\r]/g) {
|
||
|
$xmlString[$currentLine++] = $indent . "$_[1]";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sub proc_handler
|
||
|
{
|
||
|
$xmlString[$currentLine++] = "<?$_[1] $_[2]?>";
|
||
|
}
|
||
|
|
||
|
sub final_handler
|
||
|
{
|
||
|
for ($i = 0; $i < $currentLine; $i++){
|
||
|
print $xmlString[$i] . "\n";
|
||
|
}
|
||
|
}
|