Hey everyone, i'm pulling my hair out on this XML stuff. I have a two PHP classes called XmlParseToSql and XmlNode. XmlParseToSql has an array that holds XmlNode classes, and XmlNode has an array that may hold more XmlNode children. I'm not sure if this is the best way to handle this, but I've already spent so much time on it, that I don't want to start over.
My problem is that in this function called "elementClosed", i keep getting this error in PHP: Warning: array_push(): First argument should be an array. When i echo it, it says it's an array, but PHP for some reason or another doesn't think it is.
Here is my code. I've omitted some stuff that I didn't deam necessary. I can post all the code and xml schema if you guys need it:
class XmlParseToSql
{
var $xml_file;
var $xml_parser;
var $xml_data;
var $xml_stack; // Holds the stack the keeps track of open elements
var $xml_stack_len; // Length of the Xml stack
function XmlParseToSql($xml_file, $db_conn, $db_table)
{
$this->xml_file = $xml_file;
$this->xml_stack = array();
$this->xml_stack_len = 0;
$this->db_conn = $db_conn;
$this->db_table = $db_table;
$this->db_fields = $this->retrieveDbFields($this->db_table, $this->db_conn);
$this->xml_parser = xml_parser_create();
xml_set_object($this->xml_parser, $this);
xml_set_element_handler($this->xml_parser, "elementOpen", "elementClosed");
xml_set_character_data_handler($this->xml_parser, "elementData");
}
function elementData($parser, $data)
{
if (strlen($this->xml_stack[$this->xml_stack_len - 1]->node_value) == 0)
{
$this->xml_stack[$this->xml_stack_len - 1]->node_value = $data;
}
}
function elementOpen($parser, $name, $attribs)
{
$temp_XmlNode = new XmlNode($name, '', array());
array_push($this->xml_stack, $temp_XmlNode);
$this->xml_stack_len++;
// $stack_length = count($this->xml_stack) - 1;
// echo "PUSH new element onto stack: " . $this->xml_stack[$stack_length]->node_name . "<br>";
}
function elementClosed($parser, $name)
{
$temp_XmlNode = array_pop($this->xml_stack);
$this->xml_stack_len--;
array_push($this->xml_stack[$this->xml_stack_len - 1]->node_child, $temp_XmlNode);
//echo $this->xml_stack[$this->xml_stack_len - 1]->node_child . "<br>";
}
}
class XmlNode
{
var $node_name; // Name of the node
var $node_value; // Value of the node
var $node_child; // Array that holds node children
function XmlNode($node_name, $node_value, $node_child)
{
$this->node_name = $node_name;
$this->node_value = $node_value;
$this->node_child = $node_child;
}
}
any help would be appreciated, thanks