【问题标题】:How do I set the format of the rest of an XML file?如何设置 XML 文件其余部分的格式?
【发布时间】:2011-12-18 15:04:29
【问题描述】:

我有一个 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 文件的其余部分解析为原始格式?

【问题讨论】:

    标签: xml perl format twig


    【解决方案1】:

    您的 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_”处理程序)——这样它将像所有其他节点一样获得漂亮的打印处理。

    【讨论】:

      猜你喜欢
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多