無料Wikiサービス | デモページ | [広告] サイト検索サービス Sx4
Linuxなどのメモ書き
検索

最近のコメント
MySQL 保守関連 - ダイゴウジ・ガイ
JavaScript インラインフレーム(iframe)関連 - ありがとうございます。
JavaScript Rangeの使い方 - ども
JavaScript addEventListener() - kztomita
JavaScript addEventListener() - uraichi
Amazon.co.jp


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/9/9 12:45:34 - kztomita
(2006/9/9 12:39:16 作成)