300)
{
print break;
break;
}
$xmlstring = trim(substr($xmlstring, strpos($xmlstring, ' $thisnodeascends = (substr($xmlstring, 1, 1) == '/');
$thisnodedescends = (substr($xmlstring, strpos($xmlstring, '>') - 1, 1) != '/');
$nodename = substr($xmlstring, 1, strpos($xmlstring, ' ') -1);
$openelement = substr($xmlstring, strpos($xmlstring, ' ') + 1);
$openelement = substr($openelement, 0, strpos($openelement, '>') );
if(substr($openelement, strlen($openelement) - 1, 1) == /)
{
$openelement = substr($openelement, 0, strlen($openelement) - 1);
}
if($thisnodeascends)
{
$currentdepth--;
$currentnode = &$currenthierarchy[$currentdepth];
}
else
{
if($thisnodedescends)
{
$currentnode[] = array('__attributes' => parsexmlattributesstring($openelement), '__children' => array(), '__nodename' => $nodename);
$currenthierarchy[$currentdepth] = &$currentnode;
$currentdepth++;
$lastitem = &$currentnode[count($currentnode) - 1];
$currentnode = &$lastitem['__children'];
}
else //this node is at the same level
{
$currentnode[] = array('__attributes' => parsexmlattributesstring($openelement), '__nodename' => $nodename);
}
}
$xmlstring = substr($xmlstring, strpos($xmlstring, '>') + 1);
}
return $xmlarray;
}
function parsexmlattributesstring($xmlelementstring)
{
$exitafter100loops = 0;
$xmlelementarray = array();
while($xmlelementstring != '')
{
$exitafter100loops++;
if($exitafter100loops > 100)
{
print break;
break;
}
$equalscharacterpos = strpos($xmlelementstring, '=');
$key = trim(substr($xmlelementstring, 0, $equalscharacterpos));
$xmlelementstring = substr($xmlelementstring, $equalscharacterpos + 1);
$openbracket = substr($xmlelementstring, 0, 1);
$xmlelementstring = substr($xmlelementstring, 1);
$endbracketpos = strpos($xmlelementstring, $openbracket);
$value = substr($xmlelementstring, 0, $endbracketpos);
$xmlelementstring = substr($xmlelementstring, $endbracketpos + 1);
if($key)
{
$xmlelementarray[$key]=$value;
}
}
return $xmlelementarray;
}
?>