webForumDet fria alternativet

Hämta tid från annan rad

1 svar · 203 visningar · startad av pongo

pongoMedlem sedan aug. 200325 inlägg
#1

Hej,
Jag hade tänkt att använda en XML fil för att få igång text-tv i mitt tv-program.

Problemet är att programmet flippar ur om stopptid saknas för varje program. Tyvärr saknas stopptid ganska ofta...

Det ser ut ungefär så här när det är rätt:

<programme start="20040511160500 +0200" stop="20040511163500 +0200" channel="svt1.svt.se">
<title lang="sv">Titel</title>
<desc lang="sv">Desc</desc>
</programme>

osv.

Saknas stop="*" flippar det alltså.

Min tanke var att på nästa <programme> tagg hämta starttiden och sätta det som stopptid på föregående <programme> tagg om stopptid saknas.

Är det möjligt? Någon som kan ge ett exempel på hur det skulle kunna se ut?

Felaktigt kan det se ut enligt följande:

<programme start="20040511160500 +0200" stop="20040511163500 +0200" channel="svt1.svt.se">
<title lang="sv">Titel</title>
<desc lang="sv">Desc</desc>
</programme>
<programme start="20040511160500 +0200" channel="svt1.svt.se">
<title lang="sv">Titel</title>
<desc lang="sv">Desc</desc>
</programme>
<programme start="20040511160500 +0200" stop="20040511163500 +0200" channel="svt1.svt.se">
<title lang="sv">Titel</title>
<desc lang="sv">Desc</desc>
</programme>

Tacksam för tips.

HansenMedlem sedan aug. 2000374 inlägg
#2

Hej,

Kanske så här:

#!/usr/bin/perl

use strict;
use warnings;

use XML::LibXML;

my $parser = XML::LibXML->new;
my $doc    = $parser->parse_file('./tv.xml');

my $result = $doc->findnodes('//programme');

while ( my $node = $result->shift ) {

    unless ( $node->hasAttribute('stop') ) {
    
        # Om vi har ett äldre syskon, använd 'start' tid som 'stop' tid
        if ( my $next = $result->get_node(1) ) {
            $node->setAttribute( 'stop', $next->getAttribute('start') );
        }
    }
}

$doc->toFile( './tv_fixed.xml', 1 );

I koden använder jag modulen XML::LibXML som i sin tur är beroende av libxml

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)