2012-04-03 125 views
0

我需要将我的输出格式化为xml。我们说我在参数中得到了数字,我希望这个数字意味着前面的父元素有多少空间。例如2号:Perl格式化输出xml

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

或4:

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

我喜欢MODUL XML ::的libxml,是有办法,我怎么能做到这一点在这个MODUL?或者哪个模块可以做到这一点?

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

回答

2

随着XML ::嫩枝可以使用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

我找到2个可能的解决方案缩进一般:通过XML ::的libxml http://search.cpan.org/dist/XML-Twig/Twig.pm

2):

1)通过XML ::嫩枝 您可以设置通过toString方法缩进长度。

检查这里的格式参数说明: http://metacpan.org/pod/XML::LibXML::Document

编辑:对不起,我是太快了。你的意图是计算基于input-xml的缩进大小 - 对吗?

+0

我想设置打算让输出值,我在PARAMS得到,但现在我在你的链接,上面写着:“libxml2的在每个缩进级别使用2个空格字符的硬编码缩进。该值在运行时不能更改。“所以我认为我不能在libxml中改变空格的数量,所以我必须以另一种方式来改变它的空间数量, – 2012-04-03 06:52:05

+0

第一个链接已经死了, – 2017-04-05 12:20:31

+0

thx,更正了它 – 2017-04-05 13:41:43

0

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

可选的$ format参数设置输出的缩进。此 参数预计为整数值,指定应使用 缩进。 format参数可以有三种 不同的值,如果使用它:

如果$格式为0,不是它最初 解析

如果$格式是1,libxml2的将新增忽略白色文件转储空格,所以节点 的内容更容易阅读。现有文本节点不会被更改

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

libxml2使用每个 缩进级别的2个空格字符的硬编码缩进。这个值在运行时不能被改变。

你可以在my blog上查看关于如何在perl中生成正确的xml的小例子。

+0

是的,这有助于我格式化xml,但是我不能设置多少空间字符用于缩进,这就是我需要的。 – 2012-04-03 08:01:09

+0

啊,对不起,我没有那样做。 – 2012-04-03 08:30:01