2012-11-02 2 views
1

저는 정말 perl에 익숙하지 않고 XML :: Simple을 사용하여 XML로로드 할 때 문제가 있습니다. 그리고 태그 이름을 해시 이름으로 사용합니다. 나는 "xsd : schema"라는 이름으로 저장된 해쉬를 원하지만 분명히 $ xsd : schema가 작동하지 않습니다. 나는 나이 들었어 그것을 검색하고 그것을 어떻게 할 수 없는지 찾지 못했습니다.perl의 변수 이름에 a :를 사용합니다.

키 값을 알 수 있도록 해시를 어떻게 얻을 수 있습니까?

편집 :

미안하지만 나 자신을 잘 설명하지 못했습니다. 나는 해시 여러 수준의 깊은하지만 이름 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