2012-11-02 106 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