I wrote a script to parse an XML doc in straightforward PHP, but then decide
to write it as objects
but now I have a problem, that I hope someone with a  little bit more
experience can look at:

Im at my wits end and would appreciate any help, im getting no errors as
such, but it is not parsing the
information.
You can read the script easier here:  http://www.pastebin.com/64934

Thanks in advance,
M

========================================================
XML File (tips.xml)
========================================================
<?xml version="1.0" encoding="ISO-8859-1"?>
<newsfeed timestamp="07/04/2004 11:12" teamid="5802">
 <newsstory articletype="HEADLINE1" storyid="SID1">
   <headline>HEADLINE 1</headline>
   <abstract>ABSTRACT TEXT - STORY 1</abstract>
   <details>
    <para>PARA TEXT - STORY 1</para>
   </details>
  </newsstory>
 <newsstory articletype="HEADLINE2" storyid="SID2">
   <headline>HEADLINE 2</headline>
   <abstract>ABSTRACT TEXT - STORY 2</abstract>
   <details>
    <para>PARA TEXT - STORY 2</para>
   </details>
  </newsstory>
 <newsstory articletype="HEADLINE3" storyid="SID3">
   <headline>HEADLINE 3</headline>
   <abstract>ABSTRACT TEXT - STORY 3</abstract>
   <details>
    <para>PARA TEXT - STORY 3</para>
   </details>
  </newsstory>
 <newsstory articletype="HEADLINE4" storyid="SID4">
   <headline>HEADLINE 4</headline>
   <abstract>ABSTRACT TEXT - STORY 4</abstract>
   <details>
    <para>PARA TEXT - STORY 4</para>
   </details>
  </newsstory>
</newsfeed>

========================================================
Class File (xml.class.php)
========================================================

<?php

 class XMLParser{

  var $_file;  // Location/Filename of XML File
  var $_xparser; // Parser
  var $_fp;  // FilePointer
  var $_data;  // Data being parsed

  var $_currentElement; // Current tag
  var $_newstime;    // Timestamp
  var $_suppliers_id;   // Suppliers ID
  var $_article_type;   // Article Type
  var $_story_id;    // Story ID
  var $_headline;    // Headline
  var $_abstract;    // Abstract
  var $_para;     // Paragragh


  //Initialise XML File & parser
  function XMLParser($filename){
   $this->_file = $filename;
   $this->_xparser = xml_parser_create();
   $this->_fp = "";
   $this->_data = "";
   /*
   $this->_currentElement = "";
   $this->_newstime = "";
   $this->_suppliers_id = "";
   $this->_article_type = "";
   $this->_story_id = "";
   $this->_headline = "";
   $this->_abstract = "";
   $this->_para = "";
   */
  }

  //Set callback functions
  function createCallBacks()
  {
   xml_set_element_handler($this->_xparser, array($this, "startElement"),
array($this, "endElement"));
   xml_set_character_data_handler($this->_xparser, array($this,
"charData"));
  }

  //Open file for reading
  function openFile()
  {
   if(!($this->_fp = fopen($this->_file, "r"))){
    die("Cannot locate XML file: " . $this->_file);
    exit();
   }
  }

  //Start parsing
  function parseFile()
  {
   while($this->_data = fread($this->_fp, 4096))
   {
    // Error Handler
    if(!xml_parse($this->_xparser, $this->_data, feof($this->_fp)))
    {
     die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($this->_xparser)),
xml_get_current_line_number($this->_xparser)));
     exit();
    }
   }
  }

  //Free up parser memory
  function freeParser()
  {
   xml_parser_free($this->_xparser);
  }

  //Parse START tags
  function startElement(&$_xparser,$name,$attribs) {

   $this->_currentElement = $name;

   if ($name == "NEWSFEED") {
      $this->_newstime = $attribs['TIMESTAMP'];
      $this->_suppliers_id = $attribs['TEAMID'];
   }

   if ($name == "NEWSSTORY") {
      $this->_article_type = $attribs['ARTICLETYPE'];
      $this->_story_id = $attribs['STORYID'];
   }
  }

  //Parse END tags
  function endElement(&$_xparser,$name) {

   $this->_currentElement = "";

   if($name == "NEWSSTORY"){
    // Echo would be queries to screen *DELETE AFTER DEBUG*
    echo "<nobr>INSERT INTO table (timestamp, team_id, art_type, story_id,
headline, abstract, para) VALUES ('" . $this->_newstime . "','" .
$this->_suppliers_id . "','" . $this->_article_type . "','" .
$this->_story_id . "','" . $this->_headline ."','" . $this->_abstract .
"','" . $this->_para . "')</nobr><br>\n";

    $this->_currentElement = "";
    $this->_article_type = "";
    $this->_story_id = "";
    $this->_headline = "";
    $this->_abstract = "";
    $this->_para = "";
   }
  }

  //Parse MAIN tag content
  function charData(&$_xparser,$data){

   switch($this->_currentElement){

    case "HEADLINE":
     $this->_headline = $data;
    break;

    case "ABSTRACT":
     $this->_abstract = $data;
    break;

    case "PARA":
     $this->_para = $data;
    break;

   }
  }
 }
?>

========================================================
Index File (index.php) (calls class)
========================================================

<?php

 require_once("xml.class.php");

 $xml = new XMLParser("tips.xml");
 $xml->createCallBacks();
 $xml->openFile();
 $xml->parseFile();
 $xml->freeParser();
?>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to