XML parsen

Pagina: 1
Acties:
  • 83 views sinds 30-01-2008

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Verdorie, de search werkt niet:
Het forum is momenteel niet bereikbaar wegens database problemen. Probeer het zo nog eens.
Dan maar even een vraagje... De meeste kennen vast dit ding wel: http://www.tweakers.net/turbotracker.dsp. Hoe bouw je zoiets nou in een PHP script? Voorbeeldje? :P

[ specs ] [ Tweaker gallery ]


  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
paar keer F5 als je z'n page tegen komt en hij werkt wel :)

Verwijderd

Behalve bij de search daar blijf je eindeloos #55 krijgen. maare tenzij het erg veel haast heeft laat het gewoon ff liggen tot de search het wel doet, want ik weet zeker dat 't er in staat.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Wil je zo'n XML file opbouwen of wil je die XML file inlezen?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Op vrijdag 05 oktober 2001 21:23 schreef mbravenboer het volgende:
Wil je zo'n XML file opbouwen of wil je die XML file inlezen?
De XML file heb ik dus al, dat is die Turbotracker. Maar wat doe ik er mee? Ik heb dus 0,0 ervaring met XML, vandaar de vraag... :)

[ specs ] [ Tweaker gallery ]


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

php heeft xml support ingebouwd, ga ff zoeken op php.net

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
'k ben er mee bezig... Niet dat ik ergens kom, maar ik ben er mee bezig...

[ specs ] [ Tweaker gallery ]


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Okee... Op php.net staat wat voorbeeld code. In een van de notes vond ik het volgende stukkie 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
<?
$file = "turbotracker.xml";

$depth = array(); 
$livellovecchio = 0; 

function startElement($parser, $name, $attrs) { 
    
    global $livellovecchio; 
    global $depth; 

    $livello = $depth[$parser]; 

    if ($livello > $livellovecchio) { 
        echo "<ul>\n"; 
    } 
    if ($livello < $livellovecchio) { 
        echo "</ul>\n"; 
    } 
    $livellovecchio = $livello; 

    print "<li><b>$name</b>\n"; 
    $depth[$parser]++; 
} 

function endElement($parser, $name) { 
    global $depth; 
    $depth[$parser]--; 
} 

function characterData($parser, $data) { 
    if (trim($data)) { 
        echo " - "; 
    } 
    print $data . "\n"; 
} 

$xml_parser = xml_parser_create(); 
xml_set_element_handler($xml_parser, "startElement", "endElement"); 
xml_set_character_data_handler($xml_parser, "characterData"); 
if (!($fp = fopen($file, "r"))) { 
    die("Errore durante l'apertura del file XML"); 
} 
echo "<ul>\n"; 
while ($data = fread($fp, 4096)) { 
    if (!xml_parse($xml_parser, $data, feof($fp))) { 
        die(sprintf("errore XML: %s alla linea %d", 
            xml_error_string(xml_get_error_code($xml_parser)), 
            xml_get_current_line_number($xml_parser))); 
    } 
} 
echo "</ul>\n\n"; 
xml_parser_free($xml_parser); 
?>

Dit geeft de XML zooi in HTML weer. Heel fijn allemaal, maar als ik nou bv. Alleen een lijst van alle titel's en id's wil, hoe moet ik die code dan aanpassen? Het is me duidelijk dat in de functie startElement de xml tags worden geprint en in de functie characterData wordt de bijbehorende data geprint.

In die eerste functie kan je dus makkelijk een check zetten, iets in de trent van:
PHP:
1
2
3
<?
if ($name == 'ID' || $name == 'TITEL') print "<li><b>$name</b>\n";
?>

Allemaal leuk en aardig, maar alle data wordt nog steeds geprint. Ik kan niet echt zeggen dat ik iets van XML snap. :? Hoe moet je dit nou aanpakken zodat er een fatsoenlijk lijstje van nieuwsitems geprint wordt in html?

[ specs ] [ Tweaker gallery ]


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
code:
1
$livellovecchio = 0;

leuk, dat italiaans (of whatever) :) zal wel iets van niveau betekenen ofzo?
Allemaal leuk en aardig, maar alle data wordt nog steeds geprint.
Inderdaad, in de data-handler (characterData()) moet je dus ook een soortgelijke check zetten: kijk wat de huidige open tag is, en alleen als het 'ID' of 'TITEL' is voer je het stukje code uit.

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Op vrijdag 05 oktober 2001 23:29 schreef marcusk het volgende:
code:
1
$livellovecchio = 0;

leuk, dat italiaans (of whatever) :) zal wel iets van niveau betekenen ofzo?
'k Denk 't, maar heb 't eruit gesloopt.
Inderdaad, in de data-handler (characterData()) moet je dus ook een soortgelijke check zetten: kijk wat de huidige open tag is, en alleen als het 'ID' of 'TITEL' is voer je het stukje code uit.
Ook een idee... Het werkt nu. Geinig, m'n eerste (niet compleet zelf gemaakte) XML-parser. Ik kom er nog wel eens misschien toch dan wel enzo... :)

Hier 's de rauwe-zonder-html-en-styles-opmaak code, voor de liefhebber die er nog mee stoeit:
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
<?
    $xml_file = "http://www.tweakers.net/turbotracker.dsp";
    $curtagname = '';
    $lastid = '';
    
    function startElement($parser, $name, $attrs) { 
        global $curtagname;
        $curtagname = $name;
    } 
    
    function endElement($parser, $name) { 
        global $curtagname;
        $curtagname = '';
    } 
    
    function characterData($parser, $data) { 
        global $curtagname;
        global $lastid;

        if ($curtagname == 'ID') $lastid = $data;
        elseif ($curtagname == 'TITEL') {
            echo "<a href=\"http://www.tweakers.net/nieuws/$lastid\"".
                "target=\"blank\">$data</a><br>\n";
        }
    } 
    
    $xml_parser = xml_parser_create();
    xml_set_element_handler($xml_parser, "startElement", "endElement"); 
    xml_set_character_data_handler($xml_parser, "characterData"); 
    if (!($fp = fopen($xml_file, "r"))) { 
        die("Could not open $xml_file for parsing!\n");
    } 
    while ($data = fread($fp, 4096)) { 
        if (!xml_parse($xml_parser, $data, feof($fp))) { 
            die(sprintf("XML-error: %s in line %d", 
                xml_error_string(xml_get_error_code($xml_parser)), 
                xml_get_current_line_number($xml_parser))); 
        } 
    } 
    xml_parser_free($xml_parser); 
?>

[ specs ] [ Tweaker gallery ]


  • CrushOne
  • Registratie: Juni 2001
  • Laatst online: 25-03-2024

CrushOne

Error Ω

ik heb deze veranderd met als parsepagina fok

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
<? 
    $xml_file = "http://www.athena.fokzine.net/~danny/remote.xml"; 
    $curtagname = ''; 
    $lastid = ''; 
     
    function startElement($parser, $name, $attrs) {  
        global $curtagname; 
        $curtagname = $name; 
    }  
     
    function endElement($parser, $name) {  
        global $curtagname; 
        $curtagname = ''; 
    }  
     
    function characterData($parser, $data) {  
        global $curtagname; 
        global $lastid; 

        if ($curtagname == 'ID') $lastid = $data; 
        elseif ($curtagname == 'TITEL') { 
            echo "<a href=\"http://frontpage.fok.nl/news.fok?id=$lastid\"". 
                "target=\"blank\">$data</a><br>\n"; 
        } 
    }  
     
    $xml_parser = xml_parser_create(); 
    xml_set_element_handler($xml_parser, "startElement", "endElement");  
    xml_set_character_data_handler($xml_parser, "characterData");  
    if (!($fp = fopen($xml_file, "r"))) {  
        die("Could not open $xml_file for parsing!\n"); 
    }  
    while ($data = fread($fp, 4096)) {  
        if (!xml_parse($xml_parser, $data, feof($fp))) {  
            die(sprintf("XML-error: %s in line %d",  
                xml_error_string(xml_get_error_code($xml_parser)),  
                xml_get_current_line_number($xml_parser)));  
        }  
    }  
    xml_parser_free($xml_parser);  
?> 


Maar in tegenstelling tot tnet bestaat de fox-xml uit _veel_ meer newspost
Is het mogelijk om deze parse te beperken tot 10 regels?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
:?
Is het nodig om een topic van 2 jaar te schoppen?

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.