【发布时间】:2014-04-15 18:58:11
【问题描述】:
下面的小程序应该获取格式化的 XML 文件并将其打印到另一个文件,没有新的行或制表符。但是我无法弄清楚生成的文件如何总是包含制表符和换行符,而不仅仅是一个 XML 字符串。
当我打印到控制台时,新行和标签被删除,但文件始终包含标签和新行。
open FH, ">tst.out";
MakeSourceFile($ARGV[0]);
close FH;
sub MakeSourceFile
{
my $sourceFile = shift;
eval { require XML::Parser; import XML::Parser; };
return if $@;
my $parser = new XML::Parser();
$parser->setHandlers(
Start => \&start,
End => \&end,
Char => \&data
);
$parser->parsefile($sourceFile);
}
sub start
{
my ($parseinst, $element, %attrs) = @_;
print FH "<$element";
my $attrStr = "";
map { $attrStr .= " $_=\"$attrs{$_}\""; } keys %attrs;
print FH "$attrStr>";
}
sub data
{
my ($parseinst, $data) = @_;
print FH $data;
}
sub end
{
my ($parseinst, $element, %attrs) = @_;
print FH "</$element>";
}
输入文件(test.xml):
<stuff>
<Profile id="a"></Profile>
<Profile id="b"></Profile>
<Profile id="theprofile" extends="a"></Profile>
<Group>
<Group>
<elem stuff="st">stuff here</elem>
</Group>
</Group>
</stuff>
输出文件(tst.out):
<stuff>
<Profile id="a"></Profile>
<Profile id="b"></Profile>
<Profile id="theprofile" extends="a"></Profile>
<Group>
<Group>
<elem stuff="st">stuff here</elem>
</Group>
</Group>
</stuff>
预期的文件输出(tst.out):
<stuff><Profile id="a"></Profile><Profile id="b"></Profile><Profile id="theprofile" extends="a"></Profile><Group><Group><elem stuff="st">stuff here</elem></Group></Group></stuff>
我认为当我在 VI 中打开文件时会出现某种自动格式化,但事实并非如此;当不涉及 XML::Parser 且未格式化时,我还可以告诉 perl 仅将输出写入文件。这是怎么回事?
【问题讨论】: