Perl XMLをインデントして出力する
XML::DOMでDOM Treeを操作してtoStringすると出力されるXMLはインデントされていないので読みにくい。読みやすくインデントしたい。
XML::Twigでインデントできる。
#!/usr/bin/perl
use strict;
use warnings;
use XML::DOM;
use XML::Twig;
my $xmlSrc = "";
$xmlSrc .= $_ while <DATA>;
my $parser = new XML::DOM::Parser;
my $doc = $parser->parse($xmlSrc);
my $name = $doc->createElement("Name");
$name->addText("bar");
$doc->getDocumentElement->appendChild($name);
my $xmlDst = $doc->toString;
print $xmlDst; # インデントされない
my $twig= new XML::Twig;
$twig->set_indent(" "x2);
$twig->parse($xmlDst);
$twig->set_pretty_print("indented");
my $indentedXML = $twig->sprint;
print $indentedXML;
__DATA__
<?xml version="1.0"?>
<Members>
<Name>foo</Name>
</Members>
XML::DOMでtoStringした時点での出力<?xml version="1.0"?> <Members> <Name>foo</Name> <Name>bar</Name></Members>XML::Twigでインデントした結果
<?xml version="1.0"?> <Members> <Name>foo</Name> <Name>bar</Name> </Members>
