---
title: "Hämta tid från annan rad"
type: "forum-thread"
url: "https://www.webforum.nu/amne/perl-ruby/103404-hämta-tid-från-annan-rad"
topic: "Perl & Ruby"
topic_url: "https://www.webforum.nu/amne/perl-ruby"
author: "pongo"
published: "2004-05-11T21:01:30.000Z"
updated: "2004-05-12T16:59:16.000Z"
replies: 1
views: 218
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/perl-ruby/103404-hämta-tid-från-annan-rad"
---

# Hämta tid från annan rad

## #1 — pongo, 2004-05-11T21:01Z

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.

Permalänk: https://www.webforum.nu/p/103404

## #2 — Hansen, 2004-05-12T16:59Z

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](http://search.cpan.org/dist/XML-LibXML/) som i sin tur är beroende av [libxml](http://www.xmlsoft.org/)

Permalänk: https://www.webforum.nu/p/1345074

---

Tråden på webben: https://www.webforum.nu/amne/perl-ruby/103404-hämta-tid-från-annan-rad
