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>