Hi!
I've managed to remove the array.
I think that the global array that was pushed etc, had to be referenced as
$GLOBALS['arrayname']
so the error was that yoy referenced another variable that wasn't an array.
Anyway, that problem is now removed.
I've also added a constructor in the class.
But I still have some problems.
The result of the php script will be printed when used.
This is as far I've come:
start.php:
<html>
<head><title>XML to associative array</title></head>
<?php
include("xml_to_array.php");
print "<body>";
echo "testing1" . "<br>";
$xml_parser = xml_parser_create();
echo "testing2" . "<br>";
$array_parser = new XML_to_array();
xml_set_object($xml_parser,&$array_parser);
echo "xml_parser is :" . $xml_parser . "<br>";
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen("tomerik.xml","r")
or die("Error reading XML 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);
if (isset($array_parser))
{
echo "size of array is: " . sizeof($array_parser) ."<br>";
echo "array_parser has got elements" . "<br>";
echo $array_parser["ACTID"][0] . "<br>";
foreach($array_parser as $value)
{
echo "The value is $value<br />";
echo "<br />";
}
foreach($array_parser as $key=>$value)
{
echo "The value of index $key is $value<br />";
}
} // end if
else
{
echo "array_parser has got no elements" . "<br>";
} // end else
?>
</body>
</html>
xml_to_array.php:
<?php
/ XML_to_array.php: convert XML file to associative array (tags as keys, content as elements) /
class xml_to_array {
// var $key_array = array();
// var $element_array = array();
// global $element_array;
var $current_tag = "";
var $keys = "";
var $values = "";
// constructor
function xml_to_array()
{
global $element_array;
$element_array = array();
global $key_array;
$key_array = array();
echo "Inside constructor" . "<br>";
} // end const
function startElement($parser, $tagName, $attrs)
{
// global $key_array;
global $current_tag;
$this->key_array = array_push($GLOBALS['key_array'], "$tagName");
$this->current_tag = $tagName;
}
function endElement($parser, $tagName)
{
global $key_array;
// global $element_array;
global $current_tag;
global $keys;
global $values;
if ($this->current_tag == "RESULT_SET")
{
$this->keys = array_values($this->key_array);
$this->values = array_values($this->element_array);
foreach($this->keys as $index => $key)
$assoc_array[$key] = $this->values[$index];
print_r($assoc_array);
$this->current_tag = "";
}
}
function characterData($parser, $data)
{
global $element_array;
global $current_tag;
echo "into characterData: " . $data . "<br>";
switch ($this->current_tag)
{
case "ACTID":
$this->element_array = array_push($element_array, "$data");
echo "into case" . "<br>";
break;
case "ACTID2":
$this->element_array = array_push($element_array, "$data");
break;
case "START":
$this->element_array = array_push($element_array, "$data");
break;
case "STOP":
$this->element_array = array_push($element_array, "$data");
break;
case "ACTNAME":
$this->element_array = array_push($element_array, "$data");
break;
case "DESC":
$this->element_array = array_push($element_array, "$data");
break;
case "DIFFICULTY":
$this->element_array = array_push($element_array, "$data");
break;
case "PRICE":
$this->element_array = array_push($element_array, "$data");
break;
case "HOMEPAGE":
$this->element_array = array_push($element_array, "$data");
break;
}
}
}
?>
I'll look at it some more over the weekend : )
So long!
\ Tom-Erik