XML uitlezen met behulp van fread
Ik lees met fread een XML bestand in: $readfile = fread($xmlfile ,8000);
De 8000 die de filesize aangeeft lijkt maar te werken tot max 3250 (ongeveer)
Ik lees een XML bestand in van rond de 5Kb maar dat wil alleen alles inlezen als hij kleiner is (ik haal wat item's weg)
Is deze limit aan te passen?
Dennis
Omdat ik daar niet mee kan tellen? Of omdat ik dan per cyclus niet een waarde <title> kan uitlezen?
Dennis k op 30/09/2010 20:30:18:
Omdat ik daar niet mee kan tellen? Of omdat ik dan per cyclus niet een waarde <title> kan uitlezen?
Met DOM en simplexml kan je echt wel tellen.
En met DOM en simplexml kan
Uitlezen van XML bestand, per waarde bekijken, waarde aanpassen, waarde verwerken. Als de waarde ouders is dan een reeds eerder ingelezen waarde dus niet verwerken.
Dit werkte goed, totdat de max lengte van fread bereikt is denk ik.
Als ik naar simplexml kijk kan ik daar niet individueel waardes aanpassen.
Dennis k op 30/09/2010 21:38:44:
Wat ik maakte, maar dus maar beperkt blijkt te zijn is.
Uitlezen van XML bestand, per waarde bekijken, waarde aanpassen, waarde verwerken. Als de waarde ouders is dan een reeds eerder ingelezen waarde dus niet verwerken.
(...)
Uitlezen van XML bestand, per waarde bekijken, waarde aanpassen, waarde verwerken. Als de waarde ouders is dan een reeds eerder ingelezen waarde dus niet verwerken.
(...)
Deze alinea snap ik niet helemaal. Volgens mij kloppen de zinnen ook niet echt.
Bedoel je bijvoorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<note>
<to>
Tove
</to>
<from>
Jani
</from>
<heading>
Reminder
</heading>
<body>
Don't forget me this weekend!
</body>
</note>
<to>
Tove
</to>
<from>
Jani
</from>
<heading>
Reminder
</heading>
<body>
Don't forget me this weekend!
</body>
</note>
Dat je die to dan veranderd van Tove in Pietje?
Voorbeeld komt van w3schools.
$count = count($filechunks); gewijzigd in $count = sizeof($filechunks);
iig bedankt voor het kijken.
Dennis
Gewijzigd op 30/09/2010 22:26:24 door Dennis van Dijk
Kan je ook gewoon vertellen wat je wilt met die xml?
Voor zo ver ik het zo snel die code kan begrijpen wil je gewoon waardes uit die xml halen?
Maar oké wat ik wil.
Als voorbeeld:
<item>
<title>Test waarde 1</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
<item>
<title>Test waarde 2</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
<item>
<title>Test waarde 3</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
<item>
<title>Test waarde 4</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
Ik wil dan de title uitlezen en in een variable plaatsen. Als een title al een keer uitgelezen is (pubdate) dan niet meer uitlezen.
Dit omdat de inhoud van de XML veranderd (oude data blijft er instaan)
Snap je mijn idee??
Die xml is dus ook niet goed, want die heeft geen root element.
Als je nu gewoon standaard xml functies gebruikt, dan heb je deze problemen niet. Kijk maar eens wat dit op levert:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
$string = <<<XML
<?xml version='1.0'?>
<items>
<item>
<title>Test waarde 1</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
<item>
<title>Test waarde 2</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
<item>
<title>Test waarde 3</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
<item>
<title>Test waarde 4</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
</items>
XML;
$xml = simplexml_load_string($string);
print_r($xml);
/* Levert:
SimpleXMLElement Object
(
[item] => Array
(
[0] => SimpleXMLElement Object
(
[title] => Test waarde 1
[pubDate] => Wed, 29 Sep 2010 15:30:00 GMT
)
[1] => SimpleXMLElement Object
(
[title] => Test waarde 2
[pubDate] => Wed, 29 Sep 2010 15:30:00 GMT
)
[2] => SimpleXMLElement Object
(
[title] => Test waarde 3
[pubDate] => Wed, 29 Sep 2010 15:30:00 GMT
)
[3] => SimpleXMLElement Object
(
[title] => Test waarde 4
[pubDate] => Wed, 29 Sep 2010 15:30:00 GMT
)
)
)
?>
$string = <<<XML
<?xml version='1.0'?>
<items>
<item>
<title>Test waarde 1</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
<item>
<title>Test waarde 2</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
<item>
<title>Test waarde 3</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
<item>
<title>Test waarde 4</title>
<pubDate>Wed, 29 Sep 2010 15:30:00 GMT</pubDate>
</item>
</items>
XML;
$xml = simplexml_load_string($string);
print_r($xml);
/* Levert:
SimpleXMLElement Object
(
[item] => Array
(
[0] => SimpleXMLElement Object
(
[title] => Test waarde 1
[pubDate] => Wed, 29 Sep 2010 15:30:00 GMT
)
[1] => SimpleXMLElement Object
(
[title] => Test waarde 2
[pubDate] => Wed, 29 Sep 2010 15:30:00 GMT
)
[2] => SimpleXMLElement Object
(
[title] => Test waarde 3
[pubDate] => Wed, 29 Sep 2010 15:30:00 GMT
)
[3] => SimpleXMLElement Object
(
[title] => Test waarde 4
[pubDate] => Wed, 29 Sep 2010 15:30:00 GMT
)
)
)
?>
In de XML staat wel een root element enz.. maar had ik ff weggelaten...
Toevoeging op 01/10/2010 01:21:38:
Thx,
heb nieuwe basis, zal daar op verder gaan werken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
date_default_timezone_set('Europe/Amsterdam');
$url='file.xml';
$xml_feed= simplexml_load_file($url);
$doc = new DOMDocument();
$str = $xml_feed->asXML();
$doc->loadXML($str);
$count = $doc->getElementsByTagName("title")->length;
for( $i=$count ; $i>=0; $i--)
{
echo $xml_feed->channel->item[$i]->title;
echo $xml_feed->channel->item[$i]->pubDate;
echo '<br>';
echo $i;
}
?>
date_default_timezone_set('Europe/Amsterdam');
$url='file.xml';
$xml_feed= simplexml_load_file($url);
$doc = new DOMDocument();
$str = $xml_feed->asXML();
$doc->loadXML($str);
$count = $doc->getElementsByTagName("title")->length;
for( $i=$count ; $i>=0; $i--)
{
echo $xml_feed->channel->item[$i]->title;
echo $xml_feed->channel->item[$i]->pubDate;
echo '<br>';
echo $i;
}
?>
Gewijzigd op 30/09/2010 23:01:52 door Dennis van Dijk
Nu probeer ik alles over te zetten op Debian, daar draait PHP 5.3.3-7+squeeze1 en Apache 2.2.16.
Nu krijg ik de volgende foutmeldingen: "Trying to get property of non-object in" welke verwijst naar tweede onderstaande regels
$title = $xml_feed->channel->item[$i]->title;
$pubdate = $xml_feed->channel->item[$i]->pubDate;
heb al beetje op het forum gekeken en gegoogle'd maar daar spreken ze over MySQL en dit gaat om het uitlezen van een RSS feed.
Deze optie werkt ook niet:
Quote:
foreach ($xml_feed->channel->$item[$i] as $place)
{
$title = $place->title;
$pubdate = $place->pubDate;
}
{
$title = $place->title;
$pubdate = $place->pubDate;
}
Waar zit de fout nu in? (het lijkt wel allemaal te werken)
Ik heb nog wat getest, maar de fout komt als i$ leeg is, maar voordat heeft i$ wel een waarde.
Quote:
for( $i=$count ; $i>=0; $i--)
{
$title = $xml_feed->channel->item[$i]->title;
{
$title = $xml_feed->channel->item[$i]->title;
Want als ik voor for i$ uitlees heeft hij een waarde. geeft ik i$ een vaste waarde dan komt de foutmelding dus niet.
Dennis
Toevoeging op 27/05/2011 16:57:17:
Opgelost, bleek dat de twee laatste items leeg waren
$count = $count -2; is daarbij de oplossing
*vaag*
Gewijzigd op 27/05/2011 16:39:18 door Dennis van Dijk