SimpleXML en RSS 1.0-feed (RDF)
Hallo :),
Ik probeer met SimpleXML o.a. een RSS 1.0-feed uit te lezen. Voor het gemak, hier is de feed:
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:
Toen dat niet werkte keek ik eens met var_dump wat PHP er van maakte:
En zoals je ziet is er geen enkel item in de channel-tag.
Weet iemand hoe ik die items er wel in kan krijgen?
Ik probeer met SimpleXML o.a. een RSS 1.0-feed uit te lezen. Voor het gemak, hier is de feed:
Code (php)
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
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>
<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)
1
2
3
4
5
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
?>
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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/"
}
}
}
["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?
Gesponsorde koppelingen:
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 :)
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 rrrr
Dank :). Ik lees het nu door en gebruik
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
Lijn 86 is de laatste regel..
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)
1
2
3
4
5
6
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();
?>
$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 :\
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
*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/"/>
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/"/>



