2010-07-14 42 views
1

爲了創建簡單的XML文件,我編寫了下面的Perl腳本(見下文)。生成的輸出是有效的,但我對生成的XML源代碼有特定的格式要求。使用Perl從DOM生成格式化的XML

如何更改我的腳本以添加所需的空白?

#!/usr/bin/perl 

use warnings; 
use XML::LibXML; 


my $doc = XML::LibXML::Document->new; 
my $root = $doc->createElement('LEVEL1'); 
$doc->setDocumentElement($root); 

my $system = $doc->createElement('LEVEL2'); 
$root->appendChild($system); 

my $install = $doc->createElement('LEVEL3'); 
$system->appendChild($install); 

print $doc->toString; 

輸出腳本:

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

所需的輸出:

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

回答

0

你的輸出你例子中的這1是正確的。製表符和空格對XML沒有任何意義;他們只是爲了讓人們更容易看到結構。但是,如果您仍然想要做的是確保輸出具有該結構,則一種方法是從字符串(以正確的格式)中創建新的文檔,而不是從無到有。

+0

我的目標是要改劇本,以使XML作爲例子2 我明白,例如1是正確的,但我怎麼能操縱XML作爲例子2? Yael – yael 2010-07-14 15:38:36

+0

@yael:對不起 - 最初編寫的問題聽起來像您認爲XML無效。 – MJB 2010-07-14 15:50:04

0

文檔我找到解決辦法,我添加以下代碼行

my @lines = split /\n/, $doc->toString(1); 
    shift @lines; 


    foreach (@lines) { 
    print "$_\n"; 
    } 

,現在我得到

<LEVEL1> 
    <LEVEL2> 
    <LEVEL3/> 
    </LEVEL2> 
    </LEVEL1> 
0

這不是一個答案你的問題(你已經有了)。我只是想 指出

xmllint - 命令行的XML工具(從libxml的)

可以幫助一些XML任務喜歡漂亮的打印,編碼,驗證。 在這種情況下:

perl yourscript | xmllint --format -