XML uitlezen met behulp van fread

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis van Dijk

Dennis van Dijk

30/09/2010 19:52:34
Quote Anchor link
Hallo,

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
 
PHP hulp

PHP hulp

22/12/2024 09:11:50
 

30/09/2010 20:24:32
Quote Anchor link
Waarom fread?
Gebruik dom of simplexml.
 
Dennis van Dijk

Dennis van Dijk

30/09/2010 20:30:18
Quote Anchor link
Omdat ik daar niet mee kan tellen? Of omdat ik dan per cyclus niet een waarde <title> kan uitlezen?
 

30/09/2010 21:12:37
Quote Anchor link
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 je MOET je waardes van xml bestanden uitlezen. Nooit of te nimmer zelf gaan klooien.
 
Dennis van Dijk

Dennis van Dijk

30/09/2010 21:38:44
Quote Anchor link
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.

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.
 

30/09/2010 21:43:20
Quote Anchor link
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.

(...)


Deze alinea snap ik niet helemaal. Volgens mij kloppen de zinnen ook niet echt.
Bedoel je bijvoorbeeld:
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
<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.
 
Dennis van Dijk

Dennis van Dijk

30/09/2010 22:00:16
Quote Anchor link
Ik heb het gevonden.

$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
 

30/09/2010 22:02:30
Quote Anchor link
Er klopt geen hout van die code en hoe je die xml benaderd.
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?
 
Dennis van Dijk

Dennis van Dijk

30/09/2010 22:17:15
Quote Anchor link
Klopt geen hout van? Kan maar werkt wel.

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??
 

30/09/2010 22:43:57
Quote Anchor link
Ja, er klopt geen hout van. Vaag gedoe met ereg en weet ik veel wat voor onzin nog meer. Die er nu dus niet meer is.
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)
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
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
                )

        )

)

?>
 
Dennis van Dijk

Dennis van Dijk

30/09/2010 22:58:38
Quote Anchor link
Oké ga ik proberen....



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)
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
<?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;
 }

 ?>
Gewijzigd op 30/09/2010 23:01:52 door Dennis van Dijk
 
Dennis van Dijk

Dennis van Dijk

27/05/2011 16:05:51
Quote Anchor link
PHP en Apache onder windows gaven met mijn scripts geen errors. Nu kan het zijn dat bepaalde errors niet weer gegeven werden, onder windows draaide ik 5.3.1.
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;
}


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;

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
 



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.