function xmlToArray($xmlstring) { // fix the xml if it's invalid $origstring = $xmlstring; $xmlstring = stripInvalidUtf8Chars($xmlstring); $xmlstring = stripXMLInvalidChars($xmlstring); $xmlstring = str_replace('&', '&', $xmlstring); $xmlstring = str_replace(array('&#', '&lt;', '&gt;', '&quot;', '&amp;', '&apos;'), array('&#', '<', '>', '"', '&', '''), $xmlstring); if ($xmlstring != $origstring) { //printStringDiff($xmlstring, $origstring); //return null; } // strip any namespaces from the xml $matches = null; if (preg_match_all('/<([\\w]+):/', $xmlstring, $matches)) { $namespaces = array_unique($matches[1]); foreach ($namespaces as $namespace) { $xmlstring = str_replace("<{$namespace}:", "<{$namespace}_", $xmlstring); $xmlstring = str_replace("</{$namespace}:", "</{$namespace}_", $xmlstring); } } // parse the xml $xml = @simplexml_load_string($xmlstring); $json = json_encode($xml); $array = json_decode($json, TRUE); if (!$array) { // failed to parse as XML try JSON (for feeds) $xmlstring = preg_replace('/,\\s*\\]/', ']', $xmlstring); $xmlstring = preg_replace('/,\\s*\\}/', '}', $xmlstring); $array = json_decode($xmlstring, TRUE); if ($array) { echo "\nSuccessfully parsed as json"; } } return $array; }
function xmlToArray($xmlstring) { // fix the xml if it's invalid $origstring = $xmlstring; $xmlstring = stripInvalidUtf8Chars($xmlstring); $xmlstring = stripXMLInvalidChars($xmlstring); $xmlstring = str_replace('&', '&', $xmlstring); $xmlstring = str_replace(array('&#', '&lt;', '&gt;', '&quot;', '&amp;', '&apos;'), array('&#', '<', '>', '"', '&', '''), $xmlstring); if ($xmlstring != $origstring) { //printStringDiff($xmlstring, $origstring); //return null; } // parse the xml $xml = @simplexml_load_string($xmlstring); $json = json_encode($xml); $array = json_decode($json, TRUE); if (!$array) { // failed to parse as XML try JSON (for feeds) $xmlstring = preg_replace('/,\\s*\\]/', ']', $xmlstring); $xmlstring = preg_replace('/,\\s*\\}/', '}', $xmlstring); $array = json_decode($xmlstring, TRUE); if ($array) { echo "\nSuccessfully parsed as json"; } } return $array; }