[php] loop in een xml parser

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

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 15:17
Ik ben wat aan het stoeien om een xml file te kunnen parsen om zo wat info op mijn site te krijgen( ben noob met zml, een gevorderde beginner met php). Nu zit ik met het probleem dat hij 20 links in mijn overzicht laat zien, nu wil ik dit terug brengen naar 5 tot hooguit tien. Ik weet alleen niet waar ik een if, for of while lus in moet bouwen. Zou iemand mij hiermee kunnen helpen?

code:
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
$open_tags = array( 
    'ITEM' => '<ITEM>', 
    'title' => '<title>', 
    'link' => '<link>'); 
$close_tags = array( 
    'ITEM' => '</ITEM>', 
    'title' => '</title>', 
    'link' => '</title>'); 

function startElement($parser, $name, $attrs=''){ 
    global $open_tags, $temp, $current_tag; 
    $current_tag = $name; 
    if ($format = $open_tags[$name]){ 
    switch($name){ 
        case 'ITEM': 
        echo '- '; 
        break; 
        default: 
        break; 
    } 
    } 
} 

function endElement($parser, $name, $attrs=''){ 
    global $close_tags, $temp, $current_tag; 
    if ($format = $close_tags[$name]){ 
    switch($name){ 
        case 'ITEM': 
    return_page($temp); 
    $temp = ''; 
        break; 
        default: 
        break; 
    } 
    } 
} 

function characterData($parser, $data){ 
    global $current_tag, $temp, $catID; 
    switch($current_tag){ 
    case 'LINK': 
        $temp['link'] = $data; 
        $current_tag = ''; 
        break; 
    case 'TITLE': 
        $temp['title'] = $data; 
        $current_tag = ''; 
        break; 
    default: 
        break; 
    } 
} 

function return_page(){ 
    global $temp; 
//volgende regel getest met een loop
    echo '<font size=-1><A HREF="'.$temp['link'].'">'.$temp  ['title'].'</A></font><BR>'; 
} 

$xml_file = 'xml-files/raceplanet.xml'; 

$type = 'UTF-8'; 

$xml_parser = xml_parser_create($type); 

xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); 
xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, 'UTF-8'); 

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

//volgende regel getest met een if loop
while ($data = fread($fp, 4096))
    { if (!($data = utf8_encode($data))) { 
        echo 'ERROR'."\n"; 
    } 
    if (!xml_parse($xml_parser, $data, feof($fp))) { 
        die(sprintf( "XML error: %s at line %d\n\n", 
        xml_error_string(xml_get_error_code($xml_parser)), 
        xml_get_current_line_number($xml_parser))); 
    } 
} 
xml_parser_free($xml_parser);

Ik heb al een if lus geplaatst op verschillende punten, maar dan krijg ik bv. na 5 regels een xml error. Ik heb al php.net, google en hier gezocht, maar kan geen goede informatie inden hierover.

mocht je willen kijken naar de xml file: http://www.raceplanet.net/xml_headlines.rp. Deze wordt 1 keer per kwartier gedownload en op mijn server geplaatst, zodat de server van raceplanet evt. niet te veel belast wordt.

Dit is een php parse script wat op verschillende sites staat als tutorial. Helaas kan ik nu geen link meer terug vinden hiervan.

[ Voor 13% gewijzigd door ge-flopt op 29-12-2003 22:11 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Een if is geen lus.

Moest ik jou zijn, zou ik eerst eens goed nadenken over de structuur van m'n code. Wat moet er gebeuren, hoe moet het gebeuren, etc..... ipv maar te beginnen met aanklooien, en dan ff na te gaan waar je 'een if/while/whatever moet plaatsen'.

Het is trouwens ook niet de bedoeling dat we in P&W de code voor jou gaan gaan afmaken of gaan debuggen.

[ Voor 18% gewijzigd door whoami op 29-12-2003 22:21 ]

https://fgheysels.github.io/


Dit topic is gesloten.