1

I am having trouble building what i think is a hashref (href) in perl with XML::Simple. I am new to this so not sure how to go about it and i cant find much to build this href with arrays. All the examples i have found are for normal href.

The code bellow outputs the right xml bit, but i am really struggling on how to add more to this href

Thanks Dario

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');
4

2 回答 2

2

要将新哈希添加到 arrary-ref 'books',您需要将 array-ref 强制转换为数组,然后推送到它。@{ $test->{book} }将数组引用转换为数组。

push @{ $test->{book} }, { name => ['name'], value => ['The Hobbit'] };
于 2013-04-23T22:04:38.160 回答
1

XML::Simple很痛苦,因为您永远不确定是否需要数组或哈希,并且很难区分元素和属性。

我建议你移动到XML::API. 该程序演示了如何使用它来创建与您自己的程序相同的 XML 数据,该程序使用XML::Simple.

它有一个优势,因为它在内存中构建了一个正确表示 XML 的数据结构。可以像这样线性添加数据,或者您可以将书签存储在结构中并返回并将信息添加到先前创建的节点。

此代码book以不同的方式添加这两个元素。第一种是标准方式,打开元素,添加name和元素,然后再次关闭元素。第二个显示了(抽象语法树)方法,该方法允许您在嵌套数组中传递数据,类似于为了简洁起见。此结构要求您在属性名称前加上连字符,以将它们与元素名称区分开来。valuebook_astXML::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>
于 2013-04-23T23:26:19.357 回答