Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 31-10-2005, 10:14
Paperz
Avatar van Paperz
Paperz is offline
Ik ben even bezig met een projectje. Ik wil van een rss-feed het eerste atrikel op mijn pagina later verschijnen. Nou heb ik dit:

PHP-code:
<?php

    
// Global variables for function use.
    
$GLOBALS['title'] = false;
    
$GLOBALS['link']  = false;
    
$GLOBALS['description'] = false;
    
$GLOBALS['titletext'] = null;
    
$GLOBALS['linktext'] = null;
    
$GLOBALS['desctext'] = null;

    
// function: startElement
    // Deals with the starting element
    
function startElement$parser$tagName$attrs ) {

        
// By setting global variable of tag name
        // I can determine which tag I am currently
        // parsing.

        
switch( $tagName ) {
            case 
'TITLE':
                
$GLOBALS['title'] = true;
            break;
            case 
'LINK':
                
$GLOBALS['link'] = true;
            break;
            case 
'DESCRIPTION':
                
$GLOBALS['description'] = true;
            break;
        }
    }

    
// function: endElement
    // Deals with the ending element
    
function endElement$parser$tagName ) {
        
// By noticing the closing tag,
        // I can print out the data that I want.

        
switch( $tagName ) {
            case 
'TITLE':
                    echo 
"<p><b>" $GLOBALS['titletext'] . "</b><br />\n";
                
$GLOBALS['title'] = false;
                
$GLOBALS['titletext'] = "";
            break;
            case 
'DESCRIPTION':
                echo 
"" $GLOBALS['desctext'] . "</p>\n";
                
$GLOBALS['description'] = false;
                
$GLOBALS['desctext'] = "";
            break;
            case 
'LINK':
                echo 
"<a href=\""$GLOBALS['linktext'] . "\">\n Lees meer... </a><br />\n";
                
$GLOBALS['link'] = false;
                
$GLOBALS['linktext'] = "";
            break;
        }
    }

    
// function: charElement
    // Deals with the character elements (text)
    
function charElement$parser$text ) {
        
// Verify the tag that text belongs to.
        // I set the global tag name to true
        // when I am in that tag.

        
if( $GLOBALS['title'] == true ) {
            
$GLOBALS['titletext'] .= htmlspecialcharstrim($text) );
        }
        elseif( 
$GLOBALS['link'] == true ) {
            
$GLOBALS['linktext']  .= trim$text );
        }
        elseif( 
$GLOBALS['description'] == true ) {
            
$GLOBALS['desctext'] .= htmlspecialcharstrim$text ) );
        }
    }

    echo 
"<?xml encoding=\"iso 8859-15\" version=\"1.0\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n
        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n
        <html xmlns=\"http://www.w3.org/1999/xhtml\">\n
        <head>\n
            <title>Emerce article</title>\n
        </head>\n
        <body>\n
        <p>"
;

    
// Create an xml parser
    
$xmlParser xml_parser_create();

    
// Set up element handler
    
xml_set_element_handler$xmlParser"startElement""endElement" );

    
// Set up character handler
    
xml_set_character_data_handler$xmlParser"charElement" );

    
// Open connection to RSS XML file for parsing.
    
$fp fopen"""r" ) or die( "Cannot read RSS data file." );

    
// Parse XML data from RSS file.
    
while( $data fread$fp4096 ) ) {
        
xml_parse$xmlParser$datafeof$fp ) );
    }

    
// Close file open handler
    
fclose$fp );

    
// Free xml parser from memory
    
xml_parser_free$xmlParser );

    echo 
"</body>\n
        </html>"
;
Dit is aan de hand van een voorbeeld wat ik heb gevonden, en 't resultaat is hier:
http://www.armengar.nl/xml.php

Nou zijn dit alle artikelen + site info (eerste 2 stukjes) en ik wil dus alleen 't eerste artikel (3de stukje). Hoe krijg ik dat voor elkaar met dit script?

Nou weet ik niet of er een simpelere manier is (behalve XMLreader, ik heb géén PHP5) mss iets met het omzetten naar een array, maar suggesties of verwijzing naar zoiets is ook welkom.
__________________
Val lekker even dood! Cooking is science for hungry people *Mysteria*
Met citaat reageren
Advertentie
Oud 31-10-2005, 19:35
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Je code zag er kut uit en ik was in een goede bui, dus kijk hier.

Die XML-lib heb ik zelf geschreven, gebruik m al jaren. Gebruik hem, maar wees wel zo vriendelijk om mijn copyright erin te laten staan.

Met deze lib wordt het lezen van een RSS feed vrij straightforward, een voorbeeldje is gegeven in test.phps. Vanaf daar zou het niet al te moeilijk moeten zijn.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 01-11-2005, 01:44
Paperz
Avatar van Paperz
Paperz is offline
Citaat:
Manuzhai schreef op 31-10-2005 @ 20:35 :
Je code zag er kut uit en ik was in een goede bui, dus kijk hier.

Die XML-lib heb ik zelf geschreven, gebruik m al jaren. Gebruik hem, maar wees wel zo vriendelijk om mijn copyright erin te laten staan.

Met deze lib wordt het lezen van een RSS feed vrij straightforward, een voorbeeldje is gegeven in test.phps. Vanaf daar zou het niet al te moeilijk moeten zijn.
zero rss/xml experience -_-

thx, gonna check it out
__________________
Val lekker even dood! Cooking is science for hungry people *Mysteria*
Met citaat reageren
Oud 01-11-2005, 13:19
Verwijderd
Citaat:
Manuzhai schreef op 31-10-2005 @ 20:35 :
Je code zag er kut uit en ik was in een goede bui, dus kijk hier.

Die XML-lib heb ik zelf geschreven, gebruik m al jaren. Gebruik hem, maar wees wel zo vriendelijk om mijn copyright erin te laten staan.

Met deze lib wordt het lezen van een RSS feed vrij straightforward, een voorbeeldje is gegeven in test.phps. Vanaf daar zou het niet al te moeilijk moeten zijn.
Met alle respect, je lib is volgens mij niets anders dan een adapter voor de bestaande SAX parser van php, waarbij je het de functie geeft van een DOM parser. Dat is vrij loos, want de SAX parser en DOM parser (die al reeds aanwezig is in optimalere vorm) hebben elk hun eigen doel. De SAX parser dient voor eventbased parsing en DOM als je het hele document object model i.e. de hele structuur wil cachen, waarbij eerstgenoemde door zijn eventbasedheid niet de hele boom hoeft te alloceren in geheugen, wat DOM dus wel doet.
Als je perse DOM aanpak wil hanteren (dat heel goed kan bij een kleine boom als een RSS) kun je net zo goed de lib die al voorhanden daarvoor is gebruiken, want je misbruikt de SAX parser op deze wijze imho.
Met citaat reageren
Oud 01-11-2005, 14:00
Paperz
Avatar van Paperz
Paperz is offline
Ok 't werkt prima, en ik heb 't zoals ik wil...
Eén vraagje (hoop dat dat afdoende is)
Wat doet de reduce function nou precies? Want ik zie het niet...
__________________
Val lekker even dood! Cooking is science for hungry people *Mysteria*
Met citaat reageren
Oud 01-11-2005, 14:31
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Citaat:
Ninh schreef op 01-11-2005 @ 14:19 :
Met alle respect, je lib is volgens mij niets anders dan een adapter voor de bestaande SAX parser van php, waarbij je het de functie geeft van een DOM parser.
Dat is helemaal niet loos, daar de SAX module op vrijwel alle hosts beschikbaar is, terwijl de DOM module maar heel moeilijk beschikbaar is. Daarnaast heb ik volgens mij wel eens een benchmarkje gedraaid, en is deze implementatie in ieder geval voor sommige gevallen iets sneller dan pure DOM.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 01-11-2005, 14:38
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Citaat:
Paperz schreef op 01-11-2005 @ 15:00 :
Wat doet de reduce function nou precies? Want ik zie het niet...
Ah, goede vraag. Ik moet zeggen dat ik zelf niet meer precies weet hoe die functie werkt, maar het idee is dat startElement() en endElement() eerst keurig alle nodes verzamelen, waarna er via reduce() een boomstructuur wordt gemaakt van de platte nodes array. Verder zou ik me niet echt zorgen maken over startElement(), endElement() en reduce(), dat zijn eigenlijk een soort private functies.

Overigens is deze implementatie alleen bedoeld voor data-oriented XML (waar een node alleen content of alleen andere nodes bevat), en zal het werken met markup-oriented XML (waar een node zowel content als nodes bevat) niet echt lekker werken. Voor zoiets als RSS is het echter redelijk geschikt.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 01-11-2005, 14:44
Verwijderd
Citaat:
Manuzhai schreef op 01-11-2005 @ 15:31 :
Dat is helemaal niet loos, daar de SAX module op vrijwel alle hosts beschikbaar is, terwijl de DOM module maar heel moeilijk beschikbaar is. Daarnaast heb ik volgens mij wel eens een benchmarkje gedraaid, en is deze implementatie in ieder geval voor sommige gevallen iets sneller dan pure DOM.
Moeilijk beschikbaar? Een beetje webhost heeft dit toch wel aan boord, of is iig bereid om dit even voor je te enablen (letterlijk 2 minutenklus).
En ik denk dat jij je benchmark nog gedraaid hebt met de PHP4 versie van de DOM parser gezien je classe ook in PHP4 is geschreven, de nieuwe voor php5 dus is compleet opnieuw herschreven en performed beter dan de oude, en ik denk dat het zelfs die sommige gevallen nu outperformed. Ik vraag me toch echt af hoe een native lib outperformed kan raken door een interpreted icm native lib. Maar goed, als jij het zegt
Met citaat reageren
Oud 01-11-2005, 14:47
Paperz
Avatar van Paperz
Paperz is offline
Citaat:
Manuzhai schreef op 01-11-2005 @ 15:38 :
Ah, goede vraag. Ik moet zeggen dat ik zelf niet meer precies weet hoe die functie werkt, maar het idee is dat startElement() en endElement() eerst keurig alle nodes verzamelen, waarna er via reduce() een boomstructuur wordt gemaakt van de platte nodes array. Verder zou ik me niet echt zorgen maken over startElement(), endElement() en reduce(), dat zijn eigenlijk een soort private functies.
Mja ik vroeg 't alleen omdat ik graag een beetje inzicht heb op wat ik gebruik ipv klakkeloos een scriptje overnemen. Ivm het later evt aanpassen/uitbreiden. MAar goed ik denk dat ik 't begrijp (tijdens mijn zoektocht iig veel tegen gekomen over die tree structure )
__________________
Val lekker even dood! Cooking is science for hungry people *Mysteria*
Met citaat reageren
Oud 01-11-2005, 17:29
Manuzhai
Avatar van Manuzhai
Manuzhai is offline
Citaat:
Ninh schreef op 01-11-2005 @ 15:44 :
Moeilijk beschikbaar? Een beetje webhost heeft dit toch wel aan boord, of is iig bereid om dit even voor je te enablen (letterlijk 2 minutenklus).
En ik denk dat jij je benchmark nog gedraaid hebt met de PHP4 versie van de DOM parser gezien je classe ook in PHP4 is geschreven, de nieuwe voor php5 dus is compleet opnieuw herschreven en performed beter dan de oude, en ik denk dat het zelfs die sommige gevallen nu outperformed. Ik vraag me toch echt af hoe een native lib outperformed kan raken door een interpreted icm native lib. Maar goed, als jij het zegt
Ja, ik heb het zeker over PHP4. Zoals ik al zei heb ik die dingen ruim 3 jaar geleden geschreven, toen stonden de dingen er natuurlijk ook nog wel even anders voor dan nu. En nu ben ik ook gewoon gewend aan deze lib, dus gebruik ik hem nog steeds wel eens.
__________________
Slechts beschikbaar via naamzoek/privebericht.
Met citaat reageren
Oud 01-11-2005, 17:40
Verwijderd
Citaat:
Manuzhai schreef op 01-11-2005 @ 18:29 :
Ja, ik heb het zeker over PHP4. Zoals ik al zei heb ik die dingen ruim 3 jaar geleden geschreven, toen stonden de dingen er natuurlijk ook nog wel even anders voor dan nu. En nu ben ik ook gewoon gewend aan deze lib, dus gebruik ik hem nog steeds wel eens.
Ach ja, je hebt het iig gewrapped, dat wil zeggen, je specificatie staat vast en je kan de implementatie van de klasse zo aanpassen dat het DOM XML gebruikt en het dus automatisch door propageert in de werking van je scripts die afhankelijk van de oude xml lib waren.
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 21:25.