SimpleXML en RSS 1.0-feed (RDF)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Harmen

Harmen

29/07/2008 14:35:00
Quote Anchor link
Hallo :),
Ik probeer met SimpleXML o.a. een RSS 1.0-feed uit te lezen. Voor het gemak, hier is de feed:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
29
<?xml version="1.0"?>
<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
>
  <channel rdf:about="http://example.com/news.rss">
    <title>Example Channel</title>
    <link>http://example.com/</link>
    <description>My example channel</description>
    <items>
      <rdf:Seq>
        <rdf:li resource="http://example.com/2002/09/01/"/>
        <rdf:li resource="http://example.com/2002/09/02/"/>
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="http://example.com/2002/09/01/">
     <title>News for September the First</title>
     <link>http://example.com/2002/09/01/</link>
     <description>other things happened today</description>
     <dc:date>2002-09-01</dc:date>
  </item>
  <item rdf:about="http://example.com/2002/09/02/">
     <title>News for September the Second</title>
     <link>http://example.com/2002/09/02/</link>
     <dc:date>2002-09-02</dc:date>
  </item>
</rdf:RDF>

In de channel-tag staan items die je kunt combineren met de item-tags die na de channnel-tag komen. Dus de eerste "rdf:li" hoort bij het eerste item na de channel-tag.

Nu wil ik die 2 combineren, alleen pakt SimpleXML op de een of andere manier de dubbelepuntjes niet. Wat ik doe is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$sxe
= new SimpleXMLElement($res);
// En ik probeer op deze manier de items op te zoeken:
echo $sxe->channel->items->rdf:Seq->rdf:li[$i]->attributes()->resource
?>

Toen dat niet werkte keek ik eens met var_dump wat PHP er van maakte:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
object(SimpleXMLElement)#1 (2) {
    ["channel"]=> object(SimpleXMLElement)#2 (4) {
        ["title"] =>  string(15) "Example Channel"
        ["link"] =>  string(19) "http://example.com/"
        ["description"] =>  string(18) "My example channel"
        ["items"] =>  object(SimpleXMLElement)#5 (0) {
        
        }
    }
    ["item"]=>  array(2) {
        [0]=> object(SimpleXMLElement)#3 (3) {
            ["title"]=>  string(28) "News for September the First"
            ["link"]=>  string(30) "http://example.com/2002/09/01/"
            ["description"]=>  string(27) "other things happened today"
        }
        [1]=>  object(SimpleXMLElement)#4 (2) {
            ["title"]=>  string(29) "News for September the Second"
            ["link"]=>  string(30) "http://example.com/2002/09/02/"
        }
    }
}

En zoals je ziet is er geen enkel item in de channel-tag.

Weet iemand hoe ik die items er wel in kan krijgen?
 
PHP hulp

PHP hulp

13/11/2024 07:40:02
 
Jelmer -

Jelmer -

29/07/2008 17:20:00
Quote Anchor link
Geen wonder, PHP laat alleen a-z, A-Z, 0-9 en _ toe in variabele-namen. Sowieso is de dubbele punt geen deel van de naam van het element, maar een teken dat de namespace en de naam scheidt. Je zal eerst moeten selecteren welke namespace je wilt gebruiken alvorens het element beschikbaar is.

Even verder googelend kom ik dit forumtopic tegen, toevallig gaat dat ook over RSS RDF en staat er een oplossing bij :)
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Harmen

Harmen

29/07/2008 17:28:00
Quote Anchor link
Dank :). Ik lees het nu door en gebruik
 
Harmen

Harmen

30/07/2008 10:29:00
Quote Anchor link
Nu heb ik nog een probleem..
Het lukt me niet om in die <rdf:li /> het attribuut resource te krijgen. Ik heb al een paar dingen geprobeerd, maar de errors die ik blijf krijgen zijn:
Warning: main() [function.main]: Node no longer exists in G:\htdocs\hoppelblog\functions\rssZoeker.php on line 86
Fatal error: Call to a member function attributes() on a non-object in G:\htdocs\hoppelblog\functions\rssZoeker.php on line 86

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    $items
= $sxe->channel->items;
    $items_rdf = $items->children($ns);
    $items_li = $items_rdf->Seq->children($ns);
    $attr = $items_li->li->attributes();
?>

Lijn 86 is de laatste regel..

Edit:

O ja, er moet nog wat bij regel 86: $items_li->li[$i]->attributes();

Ik krijg nog steeds dezelfde errors :\
Gewijzigd op 01/01/1970 01:00:00 door Harmen
 
Harmen

Harmen

31/07/2008 10:27:00
Quote Anchor link
*BumP*

Weet iemand een manier om in de bovenstaande feed van de tag li het resource attribuut te krijgen? Al mijn pogingen zijn mislukt... :|
<rdf:li resource="http://example.com/2002/09/01/"/>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.