2013-04-23 86 views
1

我在使用XML :: Simple構建perl中的hashref(href)時遇到了困難。 我是新來的,所以不知道如何去做,我無法找到很多與數組構建此href。我發現的所有例子都是爲了正常的href。如何用perl中的數組構建hashref?

代碼波紋管輸出對xml的一點,但我真的很掙扎如何更添加到該HREF

感謝 達里奧

use XML::Simple; 
$test = { 
book => [ 
    { 
     'name' => ['createdDate'], 
     'value' => [20141205] 
    }, 
     { 
     'name' => ['deletionDate'], 
     'value' => [20111205] 
    }, 

] 

}; 
$test ->{book=> [{'name'=> ['name'],'value'=>['Lord of the rings']}]}; 
print XMLout($test,RootName=>'library'); 

回答

2

要一個新的哈希添加到arrary-REF 'books',你需要將array-ref強制轉換爲一個數組,然後繼續前進。 @{ $test->{book} }將array-ref轉換爲數組。

push @{ $test->{book} }, { name => ['name'], value => ['The Hobbit'] }; 
+0

非常感謝奏效一種享受:) – beastofbobmin 2013-04-23 22:17:04

1

XML::Simple是一種痛苦,因爲你永遠不會知道你是否需要一個數組或哈希,這是很難的元素和屬性來區分。我建議你到XML::API。該程序演示瞭如何使用XML::Simple來創建與您自己的程序相同的XML數據。

它有一個優點,因爲它在正確表示XML的內存中構建了一個數據結構。數據可以像這樣線性添加,或者您可以在結構中存儲書籤並返回並向先前創建的節點添加信息。

該代碼以不同方式添加兩個book元素。第一種是標準方式,元素打開時,添加namevalue元素,並且book元素再次關閉。第二個顯示了_ast(抽象語法樹)方法,它允許您傳遞與XML::Simple類似的嵌套數組中的數據以獲得簡潔。此結構要求您使用連字符-作爲屬性名稱的前綴,以將它們與元素名稱區分開來。

use strict; 
use warnings; 

use XML::API; 

my $xml = XML::API->new; 

$xml->library_open; 

$xml->book_open; 
$xml->name('createdDate'); 
$xml->value('20141205'); 
$xml->book_close; 

$xml->_ast(book => [ 
    name => 'deletionDate', 
    value => '20111205', 
]); 

$xml->library_close; 

print $xml; 

輸出

<?xml version="1.0" encoding="UTF-8" ?> 
<library> 
    <book> 
    <name>createdDate</name> 
    <value>20141205</value> 
    </book> 
    <book> 
    <name>deletionDate</name> 
    <value>20111205</value> 
    </book> 
</library>