webForumDet fria alternativet

Länk klipps av vid SAX-parsing

PHP

0 svar · 152 visningar · startad av Skarre

Medlem sedan apr. 20012 427 inlägg
Frågan#1

Eftersom jag inte får DOMXML att fungera använder jag istället SAX för att försöka hämta nyheter från följande sida: http://www.basket.se/feed/news.asp?n=10

Det går dock inte så bra länken som skrivs ut bara är sista delen. Länkarna ser normalt ut så här:

http://www.basket.se/t3.asp?p=4658&x=1&a=107634

... men det som skrivs ut är bara det som kommer efter den sista ampersanden alltså:

a=107634
<?
$current_tag = '';

$GLOBALS['headline'] = '';
$GLOBALS['date'] = '';
$GLOBALS['link'] = '';

function startElement($parser, $name, $attrs) {

	global $current_tag;
	$current_tag = $name;

	// output opening HTML tags
	switch ($name) {
		case 'ARTICLE':
			echo '<tr>';
			break;
		case 'CONTENTNAME':
			echo '<td>';
			break;
		case 'CONTENTPUBLISHEDTIME':
			echo '<td>';
			break;
		case 'NEWSLINK':
			echo '<td>';
			break;
	}
}
// process data between tags
function characterData($parser, $data) {

	global $current_tag;

	// output opening HTML tags
	switch ($current_tag) {
		case 'CONTENTNAME':
			$GLOBALS['headline'] = $data;
			break;
		case 'CONTENTPUBLISHEDTIME':
			$GLOBALS['date'] = $data;
			break;
		case 'NEWSLINK':
			$GLOBALS['link'] = $data;
			break;
	}
}
function endElement($parser, $name) {
	
	global $current_tag;

	// output opening HTML tags
	switch ($name) {
		case 'ARTICLE':
			echo '</tr>';
			break;
		case 'CONTENTNAME':
			echo '<a href="'.$GLOBALS['link'].'">'.$GLOBALS['headline'].'</a></td>';
			break;
		case "CONTENTPUBLISHEDTIME":
			echo $GLOBALS['date'].'</td>';
			break;
		case 'NEWSLINK':
			echo $GLOBALS['link'].'</td>';
			break;
	}
	// clear current tag variable
	$current_tag = '';
}

// data file
$file = "http://www.basket.se/feed/news.asp?n=10";

// initialize parser
$xml_parser = xml_parser_create();

// set callback functions
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

// open XML file
if (!($fp = fopen($file, "r"))) {
	die("Cannot locate XML data file: $file");
}
?>
<table border="1">
	<?
	// read and parse data
	while ($data = fread($fp, 5120)) {
		// error handler
		if (!xml_parse($xml_parser, $data, feof($fp))) {
			die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));	
		}
	}
	?>
</table>
<?
// clean up
xml_parser_free($xml_parser);
?>
261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)