1

我是 XML::Simple 的新手(而且对 xml 也不是很热衷)。我想用它来解析一个简单的 xml 结构,我得到一个 API 的结果。我对我得到的 xml 没有任何影响。

当返回的 xml 列表只包含一个成员时,我有一个完全不同的 perl 数据结构,就像列表有更多成员时一样。这很烦人。

即使结果仅包含一个成员,我也希望具有示例 2 中的数据结构。

我该怎么做才能获得相同的输出?

示例 1:

#!/usr/bin/perl -w

use strict;
use warnings;
use Data::Dumper;
use XML::Simple;

my $xml1  = new XML::Simple;
my $data1 = $xml1->XMLin( '
<aaa>
    <bbb>
        <id>1</id>
        <text>Test 1</text>
    </bbb>
</aaa>
' );

print Dumper($data1);

结果1:

$VAR1 = {
          'bbb' => {
                   'text' => 'Test 1',
                   'id' => '1'
                 }
        };

示例 2:

my $xml2  = new XML::Simple;
my $data2 = $xml2->XMLin( '
<aaa>
    <bbb>
        <id>1</id>
        <text>Test 1</text>
    </bbb>
    <bbb>
        <id>2</id>
        <text>Test 2</text>
    </bbb>
</aaa>
' );

print Dumper($data2);

结果 2:

$VAR1 = {
          'bbb' => {
                   '1' => {
                          'text' => 'Test 1'
                        },
                   '2' => {
                          'text' => 'Test 2'
                        }
                 }
        };

Tnx 为您提供帮助。

干杯,罗伯特

4

1 回答 1

2

尝试这样做:

#!/usr/bin/perl -w

use strict;
use warnings;
use Data::Dumper;
use XML::Simple;

my $xml1  = new XML::Simple;
my $data1 = $xml1->XMLin( '
    <aaa>
        <bbb>
            <id>1</id>
            <text>Test 1</text>
        </bbb>
    </aaa>
    ',
    ForceArray=>['bbb']
);

print Dumper($data1);

来自perldoc XML::Simple

ForceArray => 1 # in - important
此选项应设置为“1”以强制嵌套元素表示为数组,即使只有一个。

如果数据结构很可能被写回为 XML,并且不希望将单个嵌套元素向上滚动到属性的默认行为,则此选项特别有用。

于 2013-03-25T22:28:43.787 回答