News:

Bored?  Looking to kill some time?  Want to chat with other SMF users?  Join us in IRC chat or Discord

Main Menu

PHP XML Parser help!

Started by ADoomedMarine, October 24, 2004, 03:14:42 AM

Previous topic - Next topic

ADoomedMarine

I currently have the following code, but I want to know how I can limit the output to only the latest 3 headlines from the RSS feed.

<?php

$insideitem
= false;
$tag = "";
$title = "";
$description = "";
$link = "";

function
startElement($parser, $name, $attrs) {
global
$insideitem, $tag, $title, $description, $link;
if (
$insideitem) {
 
$tag = $name;
} elseif (
$name == "ITEM") {
 
$insideitem = true;
}
}

function
endElement($parser, $name) {
global
$insideitem, $tag, $title, $description, $link;
if (
$name == "ITEM") {
 
printf("<dt><a href='%s'>%s</a></dt>",
 
trim($link),htmlspecialchars(trim($title)));
 
$title = "";
 
$description = "";
 
$link = "";
 
$insideitem = false;
}
}

function
characterData($parser, $data) {
global
$insideitem, $tag, $title, $description, $link;
if (
$insideitem) {
switch (
$tag) {
 case
"TITLE":
 
$title .= $data;
 break;
 break;
 case
"LINK":
 
$link .= $data;
 break;
}
}
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen("http://journals.maxpaynedev.com/recent/rss092.xml","r")
or die(
"Error reading RSS data.");
while (
$data = fread($fp, 4096))
xml_parse($xml_parser, $data, 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($xml_parser);

?>


Thanks in advance.

[Unknown]


function startElement($parser, $name, $attrs)
{
global $insideitem, $tag, $title, $description, $link;

if ($insideitem)
{
$tag = $name;
}
elseif ($name == "ITEM")
{
$insideitem = true;
}
}

function endElement($parser, $name)
{
global $insideitem, $tag, $title, $description, $link;
static $how_many_done = 0;

$how_many_done++;
if ($how_many_done > 3)
return;

if ($name == "ITEM")
{
printf('<dt><a href="%s">%s</a></dt>', trim($link), htmlspecialchars(trim($title)));
$title = "";
$description = "";
$link = "";
$insideitem = false;
}
}


Does that help?

-[Unknown]

ADoomedMarine

That didn't work for some reason :(

But I did get it figured out eventually from a friend of mine.. the code to fix it was this:

function endElement($parser, $name) {
global $insideitem, $tag, $title, $description, $link, $articles;
if ($articles <= 2) {
if ($name == "ITEM") {
  $articles++;
  printf("<dt><a href='%s'>%s</a></dt>",
  trim($link),htmlspecialchars(trim($title)));
  $title = "";
  $description = "";
  $link = "";
  $insideitem = false;
}
}
}


So fairly similar to yours.

Advertisement: