1

我对 perl 真的很陌生,并且有一个问题,我使用 XML::Simple 加载 XML,并且我将标签名称作为哈希名称。我想获取以名称“xsd:schema”存储的哈希,但显然 $xsd:schema 不起作用。我花了很长时间在谷歌上搜索它,但找不到怎么做。

如何获得该哈希值以便找出键值?

编辑:

对不起,我没有很好地解释自己。我想在几个级别的哈希中找出这些键的键和值,但是名称 xsd:schema 导致语法错误:

foreach my $attributes (keys %{ $data{$xsd:schema}{$xsd:element}}){
    print "$attributes : ${$data}{$xsd:schema}{$xsd:element}{$attributes}\n";
}

编辑2:这是我的做法。

$schemaData = $data->{'xsd:schema'}->{'xsd:element'}->{'xsd:complexType'}->{'xsd:sequence'}->{'xsd:element'}->{'xsd:complexType'}->{'xsd:sequence'}->{'xsd:element'};

print Dumper($schemaData);

foreach my $fieldName (keys %{ $schemaData}){

    $fieldType =  $schemaData->{$fieldName}->{'type'};
    print "$fieldType\n";
}
4

1 回答 1

10

使用Data::Dumper可视化复杂的数据结构。

XML::Simple 不创建新变量,它创建一个引用。请参阅Perl 数据结构说明书

use Data::Dumper;
use XML::Simple;

my $x = XMLin(q(<r xmlns:xsd="xsd"><xsd:schema atr="a">a</xsd:schema></r>));
print Dumper $x;
print $x->{'xsd:schema'}{content};

输出:

$VAR1 = {
          'xsd:schema' => {
                          'content' => 'a',
                          'atr' => 'a'
                        },
          'xmlns:xsd' => 'xsd'
        };
a
于 2012-11-02T12:44:14.197 回答