Perl
入力を読み取り、ファイルを正しくインデントする次のコードがあります。を使用していないxmllint
か、またはXML-Tidy
に問題があるためDTD
です。しかし、演習のために以下のコードを使用したとしましょう:
### begin_: file metadata
### <region-file_info>
### main:
### - name : XMLPrettyPrint: simple xml pretty print in perl
### desc : use perl with XML::Twig library to print indented xml
### date : created="Thu 2005-12-01 11:08:15"
### last : lastmod="Thu 2005-12-01 11:22:34"
### lang : perl
### tags : perl xml indent formatted pretty string cfPrettyPrint
### </region-file_info>
### begin_: init perl
use strict;
use warnings;
use XML::Twig;
### begin_: init vars
my $sXML = join "", (<DATA>);
### init params
my $params = [qw(none nsgmls nice indented record record_c)];
my $sPrettyFormat = $params->[3] || 'none';
### begin_: process
my $twig= new XML::Twig;
$twig->set_indent(" "x2);
$twig->parse( $sXML );
$twig->set_pretty_print( $sPrettyFormat );
$sXML = $twig->sprint;
### begin_: output
print $sXML;
### begin_: sample data
1;
__END__
<table><tr age="35" >
<fname>Homer</fname>
<lname>Simpson</lname></tr>
<tr age="33" >
<fname>Barney</fname>
<lname>Rubble</lname></tr>
<tr age="29" >
<fname>Betty</fname>
<lname>Rubble</lname></tr></table>
インデントと印刷は正しく行われます...ただし、XML
ファイルから読み取り、インデントしてから、新しい形式で同じファイルに戻す必要がありました。サンプルデータではなくファイルから入力を読み取り、上記のコードを使用してインデントするにPerl
はどうすればよいですか? ありがとう