2012-04-03 121 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