Perl格式化输出xml

时间:2012-04-03 06:27:03

标签: xml perl formatting perl5

我需要将输出格式化为xml。假设我在参数中得到数字,我希望这个数字表示前一个父元素有多少空格。例如2号:

<?xml version="1.0"?>
<LEVEL1>
  <LEVEL2>
    <LEVEL3/>
  </LEVEL2>
</LEVEL1>

或4:

<?xml version="1.0"?>
<LEVEL1>
    <LEVEL2>
        <LEVEL3/>
    </LEVEL2>
</LEVEL1>

我喜欢modul XML :: LibXML,有什么方法可以在这个模块中做到这一点?或者哪个模块可以做到这一点?

还有一件事,如果我想在标题后设置(或不设置)新行怎么办?我怎样才能做到这一点?谢谢

3 个答案:

答案 0 :(得分:2)

我刚刚找到了两种可能的缩进解决方案:

1)通过XML :: Twig: http://search.cpan.org/dist/XML-Twig/Twig.pm

2)通过XML :: LibXML: 您可以通过toString-method设置缩进长度。

在此处检查format-parameter的说明: http://metacpan.org/pod/XML::LibXML::Document

编辑:抱歉,我太快了。你的意图是在input-xml的基础上计算缩进大小 - 对吗?

答案 1 :(得分:2)

使用XML :: Twig,您可以使用set_indent来定义缩进字符串:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;

my $indent_nb= shift @ARGV || 1;

my $t= XML::Twig->new( pretty_print => 'indented');
$t->set_indent( ' ' x $indent_nb);
$t->parse( \*DATA)->print;

__DATA__
<?xml version="1.0"?>
<LEVEL1>
  <LEVEL2>
    <LEVEL3/>
  </LEVEL2>
</LEVEL1>

答案 2 :(得分:0)

您可以使用XML :: LibXML“to_string”或“to_file”函数。两者都支持http://metacpan.org/pod/XML::LibXML::Document中提到的“格式”。 在to_file函数中,它是文件名后面的第二个参数。

  

可选的$ format参数设置输出的缩进。这个   参数应该是一个整数值,用于指定   应使用缩进。 format参数可以有三个   如果使用不同的值:

     

如果$ format为0,则文档将按原来转储   解析

     

如果$ format为1,libxml2将添加可忽略的空格,因此节点   内容更容易阅读。现有文本节点不会被更改

     

如果$ format是2(或更高),libxml2将作为$ format == 1但它   为每个文本节点添加前导和尾随换行符。

     

libxml2使用每个2个空格字符的硬编码缩进   缩进程度。此值不能在运行时更改。

您可以查看有关如何在my blog上的perl中生成正确xml的小示例。