Avatar billede weeelo Nybegynder
20. april 2006 - 20:06 Der er 3 kommentarer og
1 løsning

If sætning i rss-parser

Hej eksperter,

Jeg er lige begyndt at lege med RSS og finder det egentlig ganske interessant. Nu vil jeg så prøve at figurere et fundet script en anelse, for at se hvad man kan gøre med alle disse feeds.

Som eksempel tager vi lige BT's sport-feed: http://www.bt.dk/rss/sport.xml

I "endElement" har jeg sat en if-sætning ind, men den fungerer ikke rigtigt. Meningen er, at man kun skal se "description" såfremt url'en (variablen $link) starter med "http://www.bt.dk/sport/intfodbold/", men det virker som sagt ikke. Det hele vises, som om det går unde "else"..

Sådan ser if-sætningen ud:
if ($link == 'http://www.bt.dk/sport/intfodbold/%') {

Virker % ikke som jokertegn? Eller er variablen ganske enkelt ikke defineret endnu?

Her er resten af koden:

<html>
<head>
<title> Current SitePoint Articles </title>
</head>
<body>
<h2>Currently on SitePoint.com...</h2>
<dl>
<?php

$insideitem = false;
$tag = "";
$title = "";
$description = "";
$link = "";

function startElement($parser, $name, $attrs) {
    global $insideitem, $tag, $title, $description, $link;
    if ($insideitem) {
        $tag = $name;
    } elseif ($name == "ITEM") {
        $insideitem = true;
    }
}

function endElement($parser, $name) {
    global $insideitem, $tag, $title, $description, $link;
    if ($name == "ITEM") {
        if ($link == 'http://www.bt.dk/sport/intfodbold/') {
            printf("<dt><b><a href='%s'>%s</a></b></dt>",
            trim($link),htmlspecialchars(trim($title)));
            printf("<dd>%s</dd>",htmlspecialchars(trim($description)));
        } else {
            printf("<dt><b><a href='%s'>%s</a></b></dt>",
            trim($link),htmlspecialchars(trim($title)));
        }
        $title = "";
        $description = "";
        $link = "";
        $insideitem = false;
    }
}

function characterData($parser, $data) {
    global $insideitem, $tag, $title, $description, $link;
    if ($insideitem) {
    switch ($tag) {
        case "TITLE":
        $title .= $data;
        break;
        case "DESCRIPTION":
        $description .= $data;

        break;
        case "LINK":
        $link .= $data;
        break;
    }
    }
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen("http://www.bt.dk/rss/sport.xml","r")
    or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
    xml_parse($xml_parser, $data, feof($fp))
        or die(sprintf("XML error: %s at line %d",
            xml_error_string(xml_get_error_code($xml_parser)),
            xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);

?>
</dl>
</body>
</html>

MVH Weeelo
Avatar billede coderdk Praktikant
20. april 2006 - 20:19 #1
Nej % virker ikke som wildcard. Du skal bruge noget som preg_match:

if ( preg_match( "§^http://www.bt.dk/sport/intfodbold/§", $link ) {
Avatar billede coderdk Praktikant
20. april 2006 - 20:20 #2
(der mangler en ) til sidst)
Avatar billede weeelo Nybegynder
20. april 2006 - 20:22 #3
Genialt. Det kunne vidst ikke gøres meget bedre! Smid et svar så er point'ne dine :)
Avatar billede coderdk Praktikant
20. april 2006 - 20:58 #4
Aight :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester