如何在perl中使用数组构建hashref?

时间:2013-04-23 21:48:25

标签: perl xml-simple hashref

我无法使用XML :: Simple构建我认为perl中的hashref(href)。 我是新手,所以不知道如何去做,我不能找到很多用数组来构建这个href。我发现的所有例子都是正常的href。

下面的代码输出正确的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 个答案:

答案 0 :(得分:2)

要向array-ref'books'添加新哈希,您需要将array-ref转换为数组,然后继续使用它。 @{ $test->{book} }将array-ref转换为数组。

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

答案 1 :(得分: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>