如何设置XML文件其余部分的格式?

时间:2011-10-31 10:05:25

标签: xml perl format twig

我有一个XML文件并使用以下代码来解析它:

open( $filehandle, "+<$path") or die "cannot open out file out_file:$!";
my $roots = { tag1 => 1 };
my $handlers = { 'tag0/tag1' => $tweak_server,
               };
my $twig = new XML::Twig(TwigRoots                => $roots,
                         TwigHandlers             => $handlers,
                         pretty_print             => 'indented',
                         twig_print_outside_roots => \*$filehandle
                        );
$twig->parsefile($path);
$twig->flush($filehandle, pretty_print => 'indented');
close $filehandle;

在输出中,所有tag1部分的格式都很好。它们只是原始格式,但文件的其余部分格式不正确。标签之间有一些空行,而且元素中的文本内容会添加一些不应该存在的空行。

有没有办法将XML文件的其余部分解析成原始格式?

1 个答案:

答案 0 :(得分:0)

您的XML是否有效(它不是HTML,是吗?!)?一些示例输入/输出XML将非常有用。

无论如何,在使用XML :: Twig之后我可以肯定地说它不会删除空行。但是,您可以通过编写自己的读取函数来解决这个问题,该函数返回XML而无需额外的换行符。

sub readxml {
    my ($fh) = @_;
    local $/;
    my $xml = <$fh>;
    $xml =~ s/\n+/\n/g;
    return $xml;
}

#
$twig->parse(readxml($filehandle));

接下来,我不认为twig会打印通过'twig_print_outside_roots'的内容。但是你可以删除'TwigRoots'或添加额外的处理程序以获取剩余的内容(或使用'_default_'处理程序) - 这样它将获得与所有其他节点一样的非常好的打印处理。