如何使用XML :: Simple访问Perl中嵌套XML结构中的深层数据?

1 xml perl xml-simple

我正在使用XML :: Simple,我在变量$ xmldata中有以下XML结构,我需要通过Perl代码访问它.

<root>
    <a>sfghs</a>
    <b>agaga</b>
    <c>
       <c1>sgsfs</c1>
       <c2>sgsrsh</c2>
    </c>
    <d>
        <d1>agaga</d1>
        <d2>asgsg</d2>
    </d>
</root>
Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码访问a和b的值:

$aval = $xmldata->{a}[0];
$bval = $xmldata->{b}[0] ;
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:如何获得say,d2的值?

Nic*_*son 5

鉴于您的上述内容,我假设您已启用ForceArray标志.嵌套键使用引用存储为哈希值.

因此,要访问'd2',您需要使用:

my $d2val = $xmldata->{d}[0]->{d2}[0];
Run Code Online (Sandbox Code Playgroud)

(或我的偏好)

my $d2val = $xmldata->{d}->[0]->{d2}->[0];
Run Code Online (Sandbox Code Playgroud)

(因为它使deref显而易见)

显然,你越深入就越可怕.这就是我几乎总是建议使用XML :: LibXML和XPath而不是XML :: Simple的原因之一.XML :: Simple很快变得不简单.XML :: Simple docs解释了各种选项如何影响这种布局.

当您想要了解数据的布局方式时,Data :: Dumper非常有用.