Hallo zusammen,
ich habe/möchte ein kleines Perl Skript schreiben welches bestimmte Parameter aus einer XML Datei ausliest. In meinem Beispiel handelt es sich um eine channels.xspf von VLC.
Die XML Datei sieht so aus. (auf einen Track gekürzt der Übersicht halber.)Es gibt insgesamt 1426 Track Elemente inkl. der Subelemente
<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">
<title>DVB-Wiedergabeliste Satelit 1</title>
<trackList>
<track>
<title>tagesschau24</title>
<location>dvb-s://satno=1:frequency=10744000:voltage=18:srate=22000000</location>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:id>0</vlc:id>
<vlcoption>program=28721</vlcoption>
</extension>
</track>
</trackList>
</playlist>
folgende Code habe ich bereits erstellt.
use XML::Simple;
use strict;
use warnings;
my $filename = 'channels.xspf';
my $title = 'tagesschau24';
my $library = XMLin($filename,
ForceArray => [ 'track', 'location' ],
KeyAttr => { track => 'title' }
);
my $track = $library->{trackList}->{track}->{$title};
my @liste = (@{$track->{location}});
print "$liste[0]\n";
Hiermit erhalte ich den Inhalt das Tag's location.
jetzt möchte ich gerne zusätzlich noch den Inhalt aus vlcoption haben.
Ich dachte folgender Ansatz wäre richtig:
my @liste2 = (@{$track->{extension}->{vlcoption}});
print "$liste2[0]\n";
Hier bekomme ich leider die Meldung:
Not a HASH reference at line 24.
Beim recherchieren in Netz bin ich immer wieder auf data Dumper ausgaben gestoßen. Die ich leider nicht wirklich verstehe. :(
hier das komplette Skript inklusive der Ausgaben/Dumper ausgaben.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use XML::Simple;
use strict;
use warnings;
use Data::Dumper;
my $filename = 'channels.xspf';
my $title = 'tagesschau24';
my $library = XMLin($filename,
ForceArray => [ 'track', 'location', 'extension', 'vlcoption'],
KeyAttr => { track => 'title' }
);
my $track = $library->{trackList}->{track}->{$title};
my $track2 = $library->{trackList}->{track}->{$title}->{extension};
print Dumper $track;
print Dumper $track2;
my @liste = (@{$track->{location}});
print "$liste[0]\n";
my @liste2 = (@{$track2->{vlcoption}});
print "$liste2[0]\n";
print Dumper @liste2;
print "$liste2[0]\n";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
C:\Users\benutzer\Desktop>test.pl
$VAR1 = {
'extension' => [
{
'vlcoption' => [
'program=28721'
],
'vlc:id' => '0',
'application' => 'http://www.videolan.org/vlc/playli
t/0'
}
],
'location' => [
'dvb-s://satno=1:frequency=10744000:voltage=18:srate=22
00000'
]
};
$VAR1 = [
{
'vlcoption' => [
'program=28721'
],
'vlc:id' => '0',
'application' => 'http://www.videolan.org/vlc/playlist/0'
}
];
dvb-s://satno=1:frequency=10744000:voltage=18:srate=22000000
Not a HASH reference at C:\Users\gutsch\Desktop\test.pl line 24.
Und nun zur eigentlichen Frage. Wie kriege ich es nun hin,dass wenn ich den Titel als Parameter übergebe, den Inhalt von Location und vlcoption zurück geliefert bekomme.
modedit Editiert von GwenDragon: Titel geändert
Last edited: 2013-01-28 15:56:21 +0100 (CET)