在perl中使用:变量名

时间:2012-11-02 12:21:52

标签: perl escaping xml-simple

我是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";
}

1 个答案:

答案 0 :(得分:10)

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

XML :: Simple不会创建新变量,而是创建引用。请参阅Perl Data Structures Cookbook

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