Code:
function checkxmlfortags($xml) {
if(strpos($xml,'</'.substr($xml,strpos($xml,'<')+1,(strpos($xml,'>',strpos($xml,'<'))-strpos($xml,'<'))-1).'>',strpos($xml,'<',strpos($xml,'<')))) {
return TRUE;
}
}
function xmltoarray($xml) {
while (strpos($xml,'<?xml')<strpos($xml,'?>')) $xml = substr($xml,0,strpos($xml,'<?xml')).substr($xml,strpos($xml,'?>',strpos($xml,'<?xml')));
while (strpos($xml,'<!--')<strpos($xml,'-->')) $xml = substr($xml,0,strpos($xml,'<!--')).substr($xml,strpos($xml,'-->',strpos($xml,'<!--')));
while(checkxmlfortags($xml)) {
list($xmla,$xmlb) = explode('<',$xml,2);
list($xmltag,$xmlb) = explode('>',$xmlb,2);
$xmltag = urldecode($xmltag);
if (strpos($xmltag,' ')) {
list($xmltag,$xmlparams) = explode(' ',$xmltag,2);
}
$n=strlen($xmlb);
for ($i=$n;$i>0;$i--) {
if (substr_count(substr($xmlb,0,$i),'</'.$xmltag.'>')-substr_count(substr($xmlb,0,$i),'<'.$xmltag.'>')==1) {
$n=$i;
}
}
$xmldata = trim(substr($xmlb,0,$n-(strlen($xmltag)+3)));
$xmlb = substr($xmlb,$n);
if (isset($xmlarray[$xmltag])) {for ($n=0;isset($xmlarray[$xmltag.'_'.$n]);$n++) {} $xmltag.='_'.$n;}
$xmlarray[$xmltag] = checkxmlfortags($xmldata) ? xmltoarray($xmldata) : urldecode($xmldata);
$xml = $xmlb;
}
return isset($xmlarray) ? $xmlarray : array();
}
function arraytoxml($array,$spacer=' ',$level=0) {
$spacing='';
for($i=$level;$i>0;$i--) { $spacing.=$spacer; }
$xml='';
foreach($array as $tag=>$val) {
$xml .= $spacing.'<'.urlencode($tag).">\n";
if (is_array($val)) {
$xml .= arraytoxml($val,$level+1);
}
else if ($val!='') {
$xml .= $spacing.urlencode($val)."\n";
}
$xml .= $spacing.'</'.urlencode($tag).">\n";
}
return ($level==0)?trim($xml):$xml;
}
Bookmarks