3

我有一个使用 .xml 解析一些 XML 的程序XML::Simple。在某些时候,XML 中似乎有多余的条目,这些条目会被序列化,但我终其一生都无法弄清楚如何将这些数据作为简单的字符串取回。该 XML 的一个子集似乎被XML::Simple. Dumper($data)运行where data is my parsed XML时,相关小节如下。

Audio = [
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      }
    ];

我将我的 XML 解析输出的一小部分传递给一个变量,如下所示:

my @audiostuff = $data->{ClipContent}->{EssenceList}->{Audio};

当我输出这个转储时,我得到以下信息

$VAR1 = [
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      },
      {
        'AudioIndex' => {
                        'StartByteOffset' => '32768',
                        'DataSize' => '3071872'
                      },
        'SamplingRate' => '48000',
        'BitsPerSample' => '16',
        'AudioFormat' => 'MXF'
      }
    ];

所以在捕获的数组中一切似乎都是正确的。该数组似乎有一个元素,并且在该元素内有四个哈希值。这就是我卡住的地方。我不知道如何将这些散列中的信息再次取出。我已经尝试了大约 40 种不同的东西,但我只是用头撞墙。我很想将每个散列的值传递给一个简单的本地数组(@samplingrate例如),其中我有所有这四个条目,并且可以通过$samplingrate[0]等简单地引用它们。

任何帮助,将不胜感激。

4

2 回答 2

6

我相信您的意思是取消引用数组,如下所示:

my @audiostuff = @{ $data->{ClipContent}->{EssenceList}->{Audio} };
# do stuff with $audiostuff[0], etc.

或者只使用 arrayref

my $audiostuff = $data->{ClipContent}->{EssenceList}->{Audio};
# do stuff with $audiostuff->[0], etc.

有关处理引用和数据结构的一些易记规则,请参阅http://perlmonks.org?node=References+quick+reference

于 2012-10-05T06:18:16.093 回答
1
my @audiostuff = $data->{ClipContent}->{EssenceList}->{Audio};

您将不得不遍历您的数组 ex:使用for.

以下是您如何访问它

    $audiostuff[0]->{'AudioIndex'}  # This will give you hashref

     # Below will give you value 32768, Similarly you can get value for 'DataSize' 

    $audiostuff[0]->{'AudioIndex'}->{'StartByteOffset'} 

    # To access other elements/values.

     $audiostuff[0]->{'SamplingRate'}

     $audiostuff[0]->{'BitsPerSample'}

     $audiostuff[0]->{'AudioFormat'} 

     # How it works is,

    $audiostuff[0] # is first element of array, 

    $audiostuff[0]->{'AudioIndex'} # -> is used because element we get 
above is hash reference and then we get value at key 'AudioIndex'.

     # Similarly for 

$audiostuff[0]->{'AudioIndex'}->{'StartByteOffset'} 
于 2012-10-05T07:32:27.373 回答