troubleshooting Question

read an xml file in perl

Avatar of trevor1940
trevor1940 asked on
XMLPerl
2 Comments1 Solution166 ViewsLast Modified:
Hi
I'm trying to extract elements from an XML file generated by mediainfo
I've done this before here but the format of the xml has changed

So how do I get at the file path on 'media ref' line and the other components
I'm getting "Not an ARRAY reference at"  line after dump
foreach my $file (@{$xml->{media}}) {

I tried to quote 'media ref' but didn't work

use strict;
use warnings;
use XML::Simple;
use Data::Dump qw(dump);

my $xml = XMLin('Path\\To\\Example.xml');

dump($xml);
foreach my $file (@{$xml->{media}}) {
    my ($FilePath,$NewName,$album,$movie);
    foreach my $key (qw(Complete_name CompleteName Collection Track Track_name Movie Movie_name Album Performer)) {
    print "key = $key\n";
        if (exists($file->{track}[0]{$key})){
            if(($key eq 'Complete_name') or ($key eq 'CompleteName')) {
                print 'File path = ', $file->{track}[0]{$key}, "\n";
                $FilePath = $file->{track}[0]{$key};
                }
            elsif(($key eq 'Collection') or ($key eq 'Album')){
                print 'Album = [', $file->{track}[0]{$key}, "]\n";
                $album = $file->{track}[0]{$key};
                }
            elsif($key =~ m/Track|Movie/i){
                print 'Movie = ', $file->{track}[0]{$key}, "\n";
                $movie = $file->{track}[0]{$key};
                }
            }
    }
  }  


Example.xml

<?xml version="1.0" encoding="UTF-8"?>
<MediaInfo
    xmlns="https://mediaarea.net/mediainfo"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://mediaarea.net/mediainfo https://mediaarea.net/mediainfo/mediainfo_2_0.xsd"
    version="2.0">
<creatingLibrary version="17.10" url="https://mediaarea.net/MediaInfo">MediaInfoLib</creatingLibrary>
<media ref="Path/To/my-clip330.mov">
<track type="General">
<VideoCount>1</VideoCount>
<AudioCount>1</AudioCount>
<FileExtension>mov</FileExtension>
<Format>MPEG-4</Format>
<CodecID>M4V </CodecID>
<FileSize>763395705</FileSize>
<Duration>632.500</Duration>
<OverallBitRate_Mode>VBR</OverallBitRate_Mode>
<OverallBitRate>9655598</OverallBitRate>
<FrameRate>24.000</FrameRate>
<FrameCount>15180</FrameCount>
<StreamSize>343786</StreamSize>
<HeaderSize>168</HeaderSize>
<DataSize>8</DataSize>
<FooterSize>763395529</FooterSize>
<IsStreamable>No</IsStreamable>
<Title>A Really good title</Title>
<Movie>A Really good title</Movie>
<Album>Really good Album</Album>
<Album_Performer>Good People</Album_Performer>
<Performer>George amp: Bungle</Performer>
<Genre>GenreA GenreB</Genre>
<Recorded_Date>2017-08-16</Recorded_Date>
<Rating>None</Rating>
<extra>
<Title_Sort>Really good Title - 02</Title_Sort>
</extra>
</track>

<track type="Video">
<!--Removed as not needed -->
</track>

<track type="Audio">
<!--Removed as not needed -->
</track>

</media>
</MediaInfo>
ASKER CERTIFIED SOLUTION
Jim Riddles
Prepress/OMS Specialist

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Join our community to see this answer!
Unlock 1 Answer and 2 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 2 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros