Hello,
I'm new to using XML with PHP, but I think I've got it figured out for
the most part. I have created a class that reads in an XML file and
returns the data it finds to an array, but I'm running into a problem
because the array keeps coming back empty. Would you mind taking a
moment to see where I'm going wrong?
file.xml
=======================================================================
<ARTICLE>
<URL>/article1.html</URL>
<TITLE>Article 1</TITLE>
</ARTICLE>
<ATRICLE>
<URL>/article2.html</URL>
<TITLE>Article 2</TITLE>
</ATRICLE>
xml.class.php
=======================================================================
<?
class eXML
{
var $Parser;
var $theArray;
var $theArrayTopElement;
var $theArrayElements;
var $theArrayPointer;
var $theArrayGetElement;
function eXML($_PARENT_, $_CHILDREN_)
{
$this->Parser = xml_parser_create("ISO-8859-1");
xml_set_object($this->Parser, &$this);
xml_set_element_handler($this-
>Parser, "Tag_Open", "Tag_Close");
xml_set_character_data_handler($this-
>Parser, "CData");
$this->theArray = array();
$this->theArrayPointer = 0;
$this->theArrayGetElement = NULL;
$this->theArrayTopElement = $_PARENT_;
$this->theArrayElements = $_CHILDREN_;
}
function Free()
{
xml_parser_free($this->Parser);
}
function Parse_Array($_FILE_)
{
$_FP_ = fopen($_FILE_, "r") or die("Cannot Open
XML Stream");
while ($_DATA_ = fread($_FP_, 4096))
{
if (!xml_parse($this->Parser, $_DATA_,
feof($_FP_)))
{
return(FALSE);
}
}
fclose($_FP_);
var_dump($this->theArray);
return($this->theArray);
}
function Tag_Open($_PARSER_, $_TAG_, $_ATTR_)
{
if ($_TAG_ == $this->theArrayTopElement)
{
$this->theArray[$this->theArrayPointer]
= "SOMETEXT";
// NOT SURE IF THIS IS NECESSARY
}
$_ELEMENTS_ = explode("::", $this-
>theArrayElements);
for ($I = 0; $I < count($_ELEMENTS_); $I++)
{
if ($_TAG_ == $_ELEMENTS_[$I])
{
$this->theArrayGetElement =
$_ELEMENTS_[$I];
}
}
}
function Tag_Close($_PARSER_, $_TAG_)
{
if ($_TAG_ == $this->theArrayTopElement)
{
$this->theArrayPointer++;
}
$this->theArrayGetElement = NULL;
}
function CData($_PARSER_, $_CDATA_)
{
if ($this->theArrayGetElement != NULL)
{
array_push($this->theArray, $_CDATA_);
$this->theArray[$this->theArrayPointer]
[$this->theArrayGetElement] = $_CDATA_;
}
}
}
?>
xml.test.php
=======================================================================
<?
$XML = new eXML("ARTICLE", "URL::TITLE");
$ARTICLES = $XML->Parse_Array("file.xml");
print_r($ARTICLES);
?>
What I expect to happen is this:
$ARTICLES[0]["URL"] == "/article1.html";
$ARTICLES[0]["TITLE"] == "Article 1";
$ARTICLES[1]["URL"] == "/article2.html";
$ARTICLES[1]["TITLE"] == "Article 2";
But the array is empty.
Thankz in advance for your help.
Robert
--
[ Swift eNetwork ] Matrix
http://matrix.swifte.net/
--
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]