我需要将输出格式化为xml。假设我在参数中得到数字,我希望这个数字表示前一个父元素有多少空格。例如2号:
<?xml version="1.0"?>
<LEVEL1>
<LEVEL2>
<LEVEL3/>
</LEVEL2>
</LEVEL1>
或4:
<?xml version="1.0"?>
<LEVEL1>
<LEVEL2>
<LEVEL3/>
</LEVEL2>
</LEVEL1>
我喜欢modul XML :: LibXML,有什么方法可以在这个模块中做到这一点?或者哪个模块可以做到这一点?
还有一件事,如果我想在标题后设置(或不设置)新行怎么办?我怎样才能做到这一点?谢谢
答案 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的小示例。