2012-11-02 67 views
1

我真的很陌生,并且遇到了使用XML :: Simple加载XML的问题,并且我将标签名称作为散列名称。我想获得名称为“xsd:schema”的哈希值,但显然$ xsd:schema不起作用。我花了很多时间使用Google搜索,无法找到如何去做。在perl中使用变量名称

我该如何获得该散列,以便我可以找出关键值?

编辑:

对不起,我没有解释得很好。我想找出一个哈希几个层次深,但名称XSD键和这些键的值:模式导致语法错误:

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

回答

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 
+0

谢谢!编辑来解释我的问题好一点。 – Shane

+5

删除美元符号,它用于标量变量。添加包含非字母数字字符的*散列键*引号。看到我的回答为例。 – choroba

+0

谢谢,这解决了我的问题。我做错了。 – Shane