2013-04-23 28 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>