Avatar billede proviben Novice
20. april 2005 - 16:27 Der er 3 kommentarer og
1 løsning

Parser fejl - en tredjedel af posterne

Følgende udmærkede parser har i en lang periode fungeret klippestabilt.

Scriptet henter dagligt over 100 poster, men som et lyn fra en klar himmel henter scriptet nu under en tredjedel af posterne.

Har checket scriptet på 3 forskellige server, dog med samme nedslående resultat. Nogle bud på en løsning?


<?php

$GLOBALS['data'] = array();
$GLOBALS['current'] =& $GLOBALS['data'];

function startTag($parser, $name, $attribs) {
$GLOBALS['current'][$name]['parent'] =& $GLOBALS['current'];
$GLOBALS['current'] =& $GLOBALS['current'][$name];
}

function endTag($handler, $name) {
$temp =& $GLOBALS['current'];
$GLOBALS['current'] =& $temp['parent'];
unset($temp['parent']);
}

function data($handler, $data) {
$data = trim($data);
if(!empty($data)) {
$GLOBALS['current'][] = $data;
}
}

$parser = xml_parser_create('') or die('Failed to create parser');
xml_set_element_handler($parser, 'startTag', 'endTag') or die ("Failed to set element handler");
xml_set_character_data_handler($parser, 'data') or die ("Failed to set data handler");

$fp = fopen('http://www.andetwebsted.dk/sti/data.htm', 'r');

while ($xml = fread($fp, 40960))
xml_parse($parser, $xml, feof($fp))
or die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));

fclose($fp);

xml_parser_free($parser);

$data = $GLOBALS['data']['INDEXFELT']['D1'];

foreach($data as $name => $value) {
foreach($value as $index => $text) {
$tempArr[$index][$name] = $text;
}
}

$db = mysql_connect('xxx', 'xxx', 'xxx');
mysql_select_db('xxx', $db);

$dbfields = "D0, D1, " . implode(', ', array_keys($tempArr[0]));
foreach($tempArr as $value) {

$dbdata = implode("', '", $value);
$sql = "INSERT INTO TABEL ($dbfields) VALUES('INDEXFELT', 'D1', '$dbdata')";
mysql_query($sql, $db);
}

mysql_close($db);

?>

##
<?xml version='1.0' encoding='ISO-8859-1'?>
<INDEXFELT>
<D1>
<D2>post1</D2>
<D3>post1</D3>
<D4>post1</D4>
<D5>post1</D5>
<D6>post1</D6>
<D7>post1</D7>
<D8>post1</D8>
<D9>post1</D9>
<D10>post1</D10>
</D1>
<D1>
<D2>post2</D2>
<D3>post2</D3>
<D4>post2</D4>
<D5>post2</D5>
<D6>post2</D6>
<D7>post2</D7>
<D8>post2</D8>
<D9>post2</D9>
<D10>post2</D10>
</D1>
<D1>
<D2>post3</D2>
<D3>post3</D3>
<D4>post3</D4>
<D5>post3</D5>
<D6>post3</D6>
<D7>post3</D7>
<D8>post3</D8>
<D9>post3</D9>
<D10>post3</D10>
</D1>
</INDEXFELT>
## osv.
Avatar billede dennismp Nybegynder
20. april 2005 - 16:40 #1
Der er fejl i det data du henter, måske?
Avatar billede proviben Novice
20. april 2005 - 17:59 #2
Nej, - de er faktisk helt ok.
Avatar billede proviben Novice
24. april 2005 - 09:02 #3
Er der flere gode forslag? - også gerne forslag til justeringer i scriptet, så jeg kan komme nærmere en løsning!
Avatar billede proviben Novice
25. april 2005 - 14:49 #4
Har fundet fejlen. Scriptet fejler nemlig når og hvis der optræder nogle tomme felter. Disse felter udfylder jeg nu via noget $str = str_replace.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester