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($fp4096))
xml_parse($xml_parser$datafeof($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: