無料Wikiサービス | デモページ
Linuxなどのメモ書き

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>



最終更新 2006/09/09 12:45:34 - kztomita
(2006/09/09 12:39:16 作成)